Записать значение Double в числовой ячейке с определенным форматом в Apache Poi 3.7 - PullRequest
11 голосов
/ 20 марта 2012

Мне нужно записать значение Double в числовую ячейку, используя определенный формат, я имею в виду, что сгенерированные xls должны иметь числовые ячейки, содержащие значения Double, например: 8,1.Я пытаюсь что-то вроде:

DecimalFormat dFormat = new DecimalFormat("##.#");
dFormat.format(doubleValue);

Но, поскольку метод форматирования возвращает строку, независимо от того, создаю ли я ячейки как числовые или нет, они всегда ведут себя как текстовые ячейки.Я думал о двух вариантах:

  • Принуждение ячеек вести себя как числовые ячейки.
  • Забыть о DecimalFormat и использовать класс Double, задающий запятую в качестве десятичного разделителя, в чем я не уверенэто возможно.

Есть идеи?

Ответы [ 3 ]

18 голосов
/ 20 марта 2012

Возможно, я что-то упустил, но я думаю, что вы просто хотите стилизовать ячейку с помощью правила форматирования, чтобы отобразить одно десятичное место

// 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, а затем задайте стиль

8 голосов
/ 05 марта 2014

Я попытался это работает нормально ...

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);

На выходе есть числовое значение с желаемым форматом: 250000

0 голосов
/ 20 марта 2012

Вам нужно поместить оба значения в одну ячейку? Можете ли вы разделить их на 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 обрабатывать что-либо как число, если оно не конвертируется в число.

...