在 Apache POI HSSF 中,单元类型仍然显示为“常规” Excel,尽管它是数字格式的

发布于 2024-12-11 02:09:26 字数 722 浏览 1 评论 0原文

我正在使用 Apache POI HSSF 从我的 Java Web 应用程序生成 Excel 电子表格。

我需要一个格式为 “数字” 并带有 2 个小数点的单元格。 (我在 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 设置为“Number”。

I am using Apache POI HSSF to generate an Excel spreadsheet from my Java Web app.

I need a cell formatted as "Number" with 2 decimal points. (My values in Java are BigDecimals, but I can convert them to doubles, no problem.) I am using this code:

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);

The issue is that, even though this works, Excel still shows my cells as General. They need to be shown as Number. As a result, for example, 0 is shown as 0, but it should be 0.00, which would happen if the format was correct (Number).

I see that it gets generated as General because I can right-click on a cell and then choose "Format Cells" to see what it is right now. It needs to be set to "Number" by Apache POI HSSF.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素衣风尘叹 2024-12-18 02:09:26

查看 Apache POI API 看起来您应该能够指定单元格的类型。

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

Reviewing the Apache POI API it looks like you should be able to specify the cell's type.

...
Cell cell = row.createCell(...);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
...
梦罢 2024-12-18 02:09:26

我假设您还没有找到问题的答案。

显示两位小数数字的一种方法是设置单元格样式。这允许您自定义小数位数和小数分隔符等。

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 中显示为数字类型。它显示为自定义类型。但从视觉上看应该是相同的,或者至少足够接近。

I'm assuming you haven't yet found an answer for your question.

One way to display numbers with two decimals is to set a cell style. This allows you to customize the number of decimal places and the decimal separator, among other things.

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

Later on, when you fill your workbook, you apply this cellStyle to the desired cells:

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

It won't show as numeric type in Excel. It shows as Custom type. But visually it should be the same, or at least close enough.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文