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