在Java Poi(Excel)中更改单元格格式(长度?)

我一直在寻找一种方法来做到这一点,但只find了一些方法来调整列的大小,并不够。

这很简单:

当我写入excel文件时,我会得到一个数字高于10.000.000的点,格式会改变,例如:

第11行:9.800.000

第12行:9.900.000

第13行:1.0E7

第14行:1.01E7

我怎样才能防止这种情况发生? 我需要整个号码,因为我稍后从我的代码中再次访问这些信息。

(我不能手动编辑excel,因为我创build它dinamically,我猜(和希望)有一个Java POI类中的variables,我可以分配一个值来改变?)

谢谢你们。

最简单的方法可能是从Excel文件中提取时转换值。

BigDecimal bigNumber = new BigDecimal(cell.getNumericCellValue()); //Use bigNumber when doing the calculations 

这是一个单元格格式的情况下,默认情况下Excel使用指数格式的数字低于一定的值,对于2013年的版本,它低于1E10。 而对于旧版本,我猜这是1E7。

为了解决这个问题,你需要在使用HSSFCellStyle创buildxls文件之前,在Java代码中格式化单元格,检查以下代码:

 HSSFCellStyle style = workbook.createCellStyle(); style.setDataFormat(workbook.createDataFormat().getFormat("#")); Double d = 10000000000.0; thecell.setCellValue(d); thecell.setCellType(Cell.CELL_TYPE_NUMERIC); thecell.setCellStyle(style); 

您可能还需要通过添加来重新调整列的大小

 sheet.autoSizeColumn(0); 

这是一个输出例如单元格格式(A1)和没有它(B1):

以单元格格式为例

不要忘记导入必要的类。

根据你的例子,你必须将DataFormat设置为"#.000"

 DataFormat format = workbook.createDataFormat(); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(format.getFormat("#.000")); cell.setCellStyle(cellStyle); 

哪里:

0 – 数字占位符。 例如,如果input8.9,并且希望显示为8.90,则使用格式#.00

# – 数字占位符。 遵循与0符号相同的规则,除非Excel中不显示额外的零,当您键入的数字在小数点的任何一边的位数less于格式中的#符号时。 例如,如果自定义格式是#。##并且在单元格中键入8.9,则会显示数字8.9。

更多Excel格式: 如何控制和了解Excel中“格式单元格”对话框中的设置