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

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

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

Ответы [ 2 ]

0 голосов
/ 19 октября 2016

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

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

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

0 голосов
/ 07 августа 2013

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

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