2015-12-21 139 views
0

我一直在寻找一种方法来做到这一点,但只找到了一些调整列大小的方法,但还不够。在Java Poi(Excel)中更改单元格格式(长度?)

It's简单:

当I'm书面方式到一个Excel文件,我得到一个点,数字获得比10.000.000高,格式变化,例如:

行11:9.800.000

行12:9.900.000

行13:1.0E7

行14:1.01E7

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

(我不能手动编辑出类拔萃,我dinamically创建它,我想(和希望)存在一些Java POI类变量,我可以分配一个值,这个改变?)

谢谢你们。

+0

你将什么样的格式应用到单元格中?如果它不是已经被请求的数字比那更多,如果你改变它会发生什么? – Gagravarr

回答

1

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

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

这工作。谢谢! – Tuzane

1

根据你的榜样,你必须设置DataFormat"#.000"

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

其中:

0 - 数字占位符。例如,如果您键入8.9并且您希望它显示为8.90,则使用格式#.00

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

更多的Excel格式:How to control and understand settings in the Format Cells dialog box in Excel

+0

不工作。无论如何感谢您的尝试。 – Tuzane

2

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

为了解决这个问题,你需要创建XLS文件,使用HSSFCellStyle之前,单元格的格式在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)的输出为例:

exemple with the cell formatting

不要忘记导入必要的类。