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

Tin*_*iny 11 java excel excel-2007 apache-poi

例如,

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

productCell.setCellValue(12.4);
productCell.setCellType(Cell.CELL_TYPE_NUMERIC);
productCell.setCellStyle(style);
Run Code Online (Sandbox Code Playgroud)

这将显示12.4在指定的单元格中.它应该是12.40.12显示的值12.非常不必要.

如果该值是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);
Run Code Online (Sandbox Code Playgroud)

我应用了一些excel公式来对数字单元格执行一些计算,这些数字单元格应该在数字单元格上应用数字格式(向上舍入一半)之后执行.

rge*_*man 35

在Excel格式中,#表示"仅在需要时将数字放在此处",但0表示"始终在此处放置数字,即使它是不必要的0".您可以指定在Apache的POI数据格式正是因为你在Excel中本身就.如果要显示0数字,则需要使用0s作为格式数字.尝试

style.setDataFormat(workbook.createDataFormat().getFormat("0.00"));
Run Code Online (Sandbox Code Playgroud)

这将使值0显示为0.0012.4作为12.40.