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

更改Java Poi(Excel)中的单元格格式(长度?),java,excel,format,apache-poi,cell,Java,Excel,Format,Apache Poi,Cell,我一直在寻找一种方法来实现这一点,但只找到了几个方法来调整列的大小,这是不够的 很简单: 当我写入excel文件时,我会遇到一个数字大于10.000.000的点,并且格式会改变,例如: 第11行:9.800.000 第12行:9.900.000 第13行:1.0E7 第14行:1.01E7 我怎样才能防止这种情况发生?我需要完整的数字,因为我以后会从代码中再次访问此信息 (我不能手动编辑excel,因为我是通过手工创建的,我想(也希望)在某个Java POI类中有一个变量,我可以为它指定一个值以

我一直在寻找一种方法来实现这一点,但只找到了几个方法来调整列的大小,这是不够的

很简单:

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

第11行:9.800.000

第12行:9.900.000

第13行:1.0E7

第14行:1.01E7

我怎样才能防止这种情况发生?我需要完整的数字,因为我以后会从代码中再次访问此信息

(我不能手动编辑excel,因为我是通过手工创建的,我想(也希望)在某个Java POI类中有一个变量,我可以为它指定一个值以进行更改?)


谢谢大家。

从excel文件中提取值时,最简单的方法可能就是转换值

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

最简单的方法可能是在从excel文件提取值时转换该值

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

根据您的示例,您必须设置为
“#.000”

其中:

0位占位符。例如,如果键入8.9并希望其显示为8.90,则使用格式#.00

#-数字占位符。遵循与0符号相同的规则,但当您键入的数字在小数点两侧的位数少于格式中的#符号时,Excel不会显示额外的零。例如,如果自定义格式为#.##,并且在单元格中键入8.9,则会显示数字8.9


更多excel格式:

根据您的示例,您必须设置为
“#.000”

其中:

0位占位符。例如,如果键入8.9并希望其显示为8.90,则使用格式#.00

#-数字占位符。遵循与0符号相同的规则,但当您键入的数字在小数点两侧的位数少于格式中的#符号时,Excel不会显示额外的零。例如,如果自定义格式为#.##,并且在单元格中键入8.9,则会显示数字8.9


更多excel格式:

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

要解决此问题,您需要在创建xls文件之前在Java代码中格式化单元格,请使用HSSFCellStyle检查以下代码:

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


别忘了导入必要的类。

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

要解决此问题,您需要在创建xls文件之前在Java代码中格式化单元格,请使用HSSFCellStyle检查以下代码:

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


别忘了导入必要的类。

您对单元格应用了什么单元格格式?如果它还不是一个需要更多位数的单元格,如果你改变它会发生什么?你对单元格应用了什么单元格格式?如果它还不是一个需要更多位数的数字,如果你改变它会发生什么?