始终使用 Apache poi 在 Excel 单元格中显示两个小数点

2022-09-03 08:49:25

例如

XSSFCellStyle style=(XSSFCellStyle) workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("#.##"));

productCell.setCellValue(12.4);
productCell.setCellType(Cell.CELL_TYPE_NUMERIC);
productCell.setCellStyle(style);

这将显示在指定的单元格中。它应该是.该值显示为完全不必要的值。12.412.401212.

如果值为 then,则显示一个点 。它应该始终显示两个十进制数字 - ,在这种情况下,无论存储在单元格中的值如何。0.0.00

如何强制Excel始终在数字单元格中显示两个小数数字?


我使用以下样式之一来显示数字单元格。

XSSFColor commonColor = new XSSFColor(new java.awt.Color(240, 240, 240));
XSSFColor cellBorderColour = new XSSFColor(new java.awt.Color(0, 76, 153));

Font font = workbook.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setColor(IndexedColors.DARK_BLUE.index);

XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle();
style.setFillForegroundColor(commonColor);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(CellStyle.ALIGN_RIGHT);
style.setFont(font);

style.setBorderLeft(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, cellBorderColour);
style.setBorderTop(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.TOP, cellBorderColour);
style.setBorderRight(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, cellBorderColour);
style.setBorderBottom(BorderStyle.DOUBLE);
style.setBottomBorderColor(cellBorderColour);

我应用了一些excel公式对数字单元格执行一些计算,这些单元格在对数字单元格应用数字格式(向上舍入一半)后预期会执行。


答案 1

在 Excel 格式设置中,a 表示“仅在需要时在此处放置数字”,但 a 表示“始终在此处放置数字,即使它是不必要的 0”。您可以在 Apache POI 中指定数据格式,就像在 Excel 本身中一样。如果您希望显示数字,则需要使用 s 作为格式化数字。尝试#000

style.setDataFormat(workbook.createDataFormat().getFormat("0.00"));

这将使值显示为 和 。00.0012.412.40


答案 2

这个对我有用:

  1. 设置单元格样式

    private CellStyle formatDecimalStyle(Workbook workbook, CreationHelper createHelper) {  
        CellStyle style = workbook.createCellStyle();
        style.setDataFormat(createHelper.createDataFormat().getFormat("0.00"));
        return style;   
    }
    
  2. 在单元格上应用样式

    CellStyle style = formatDecimalStyle(workbook, createHelper);
    Cell creditAmountCell = row.createCell(3);
    creditAmountCell.setCellValue(amount);
    creditAmountCell.setCellStyle(style);
    

推荐