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

#apache #coding-style #format #apache-poi #hssf

#apache #стиль кодирования #формат #apache-poi #hssf

Вопрос:

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

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

 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 по-прежнему отображает мои ячейки как общие. Они должны отображаться как Number . В результате, например, 0 отображается как 0, но должно быть 0.00, что произошло бы, если бы формат был правильным (число).

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

Комментарии:

1. Вы уверены, что это правильная строка формата для встроенного формата?

2. Это правильно в соответствии с этим списком: poi.apache.org/apidocs/org/apache/poi/ss/usermodel/… Но если у вас есть какие-либо другие строки формата, пожалуйста, поделитесь.

Ответ №1:

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

 ...
Cell cell = row.createCell(...);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
...
  

Ответ №2:

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

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

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

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

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

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