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