В Apache POI HSSF тип ячейки по-прежнему отображается как общий Excel, даже несмотря на то, что он имеет числовой формат

Я использую Apache POI HSSF для создания электронной таблицы Excel из моего веб-приложения Java.

Мне нужна ячейка в формате «Число» с двумя десятичными точками. (Мои значения в Java - BigDecimals, но я могу преобразовать их в двойные, без проблем.) Я использую этот код:

CellStyle numericStyle = wb.createCellStyle();
numericStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));

// output in this new style...
row.createCell(cellnum).setCellValue(((BigDecimal)value).doubleValue());
row.getCell(cellnum).setCellStyle(numericStyle);

Проблема в том, что, хотя это работает, Excel по-прежнему показывает мои ячейки как Общие. Они должны отображаться как Число. В результате, например, 0 отображается как 0, но он должен быть 0,00, что могло бы произойти, если бы формат был правильным (Число).

Я вижу, что он создается как Общие, потому что я могу щелкнуть правой кнопкой мыши по ячейке и затем выбрать «Форматировать ячейки», чтобы увидеть, что это сейчас. Он должен быть установлен на «Число» с помощью Apache POI HSSF.


person gene b.    schedule 20.10.2011    source источник
comment
Вы уверены, что это правильная строка формата для встроенного формата?   -  person Gagravarr    schedule 20.10.2011
comment
Согласно этому списку, это правильно: poi.apache. org / apidocs / org / apache / poi / ss / usermodel / Но если у вас есть какие-либо другие форматные строки, поделитесь ими.   -  person gene b.    schedule 20.10.2011


Ответы (2)


Обзор Apache POI API похоже, у вас должна быть возможность указать тип ячейки.

...
Cell cell = row.createCell(...);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
...
person axiopisty    schedule 07.08.2013

Полагаю, вы еще не нашли ответа на свой вопрос.

Один из способов отображения чисел с двумя десятичными знаками - установить стиль ячейки. Это позволяет вам, среди прочего, настроить количество десятичных знаков и десятичный разделитель.

protected CellStyle getCellStyle(HSSFWorkbook workbook) {
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setDataFormat(
        workbook.getCreationHelper().createDataFormat().getFormat("#,##0.00"));
        return cellStyle;
}

Позже, когда вы заполняете свою книгу, вы применяете этот cellStyle к нужным ячейкам:

CellStyle cellStyle = getCellStyle();
//...
// create your cell
cell.setCellStyle(cellStyle);
// set the value

Он не будет отображаться как числовой тип в Excel. Он отображается как пользовательский тип. Но визуально он должен быть таким же или хотя бы достаточно близким.

person Blueriver    schedule 19.10.2016