2014-09-24 79 views
7

例如在Excel细胞两个小数点,始终显示使用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); 

这将显示在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); 

我施加一些Excel公式对被预期施加的数字格式后进行数字单元执行一些计算(舍入半向上)上的数字的细胞。

+0

你试过这个http://stackoverflow.com/questions/9789627/write-double-value-in-numeric-cell-with-specific-format-in-apache-poi-3-7? – 2014-09-24 15:23:57

+0

是的,其行为与问题中提到的完全相同。 – Tiny 2014-09-24 15:30:59

+0

如果您在Excel中格式化单元格,您需要使用什么单元格样式才能使其看起来如何? – Gagravarr 2014-09-24 16:34:09

回答

19

在Excel格式中,#表示“仅在需要时才将数字放在此处”,但0表示“此处始终放置数字,即使它不是必需的0”。您可以指定the data format in Apache POI,正好为as you would in Excel itself。如果您想要0数字显示,则需要使用0 s作为格式数字。尝试

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

这将使价值0显示为0.0012.412.40