Запись двойного значения в числовой ячейке с определенным форматом в Apache Poi 3.7
Мне нужно написать двойное значение в числовой ячейке с использованием определенного формата, я имею в виду, что сгенерированные xls должны иметь числовые ячейки, содержащие двойные значения, например: 8,1. Я пытаюсь что-то вроде:
DecimalFormat dFormat = new DecimalFormat("##.#");
dFormat.format(doubleValue);
Но, поскольку метод format возвращает String, независимо от того, создаю ли я ячейки как числовые или нет, они всегда ведут себя как текстовые ячейки. Я думал о двух вариантах:
- Принудительные ячейки должны вести себя как числовые ячейки.
- Забыть о DecimalFormat и использовать двоеточие, определяющее запятую как разделитель десятичных чисел, что я не уверен, что это возможно.
Любая идея?
Ответы
Ответ 1
Мне может быть что-то не хватает, но я думаю, что вы просто хотите создать ячейку с правилом формата, чтобы отобразить одно десятичное место
// Do this only once per file
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
wb.getCreationHelper().createDataFormat().getFormat("#.#"));
// Create the cell
Cell c = row.createCell(2);
c.setCellValue(8.1);
c.setCellStyle(cellStyle);
Это создаст правило форматирования, создаст ячейку, установит ячейку в значение 8.1, а затем стиль
Ответ 2
Я пробовал эту работу отлично...
HSSFCellStyle cellStyle = wb.createCellStyle();
HSSFDataFormat hssfDataFormat = wb.createDataFormat();
String cellVal = "2500";
cellStyle.setDataFormat(hssfDataFormat.getFormat("#,##0.000"));
newCell.setCellStyle(cellStyle);
newCell.setCellValue(new Double(cellVal));
newCell.setCellType(Cell.CELL_TYPE_NUMERIC);
Вывод представляет собой числовое значение с требуемым форматом: 2,500,000
Ответ 3
Вам нужно поместить оба значения в одну ячейку? Можете ли вы разделить их на 2 столбца? Excel имеет встроенную функцию "Тексты в столбцы", которую вы должны иметь возможность ссылаться, которая разделит весь столбец текстовых строк на несколько столбцов на основе разделителя (например, запятой). В VBA это выглядит примерно так:
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Что касается вашего первого предлагаемого решения, невозможно заставить Excel обрабатывать что-то как число, если оно не может быть преобразовано в число.