我正在使用Apache POI 3.9进行XLS / XLSX文件处理。
在XLS表格中,有一个数字值为“3000053406”的列。
当我用POI阅读它时..
cell.getNumericCellValue()
它给我的价值就像“3.00E + 08”。这在我的应用程序中造成了巨大的问题。
如何在Apcahe POI中读取数据时设置数字格式?
我知道有一种方法是将列设置为“文本”类型。但我想知道在读取数据时是否有任何其他方式在Apache POI方面。或者我们可以使用简单的Java DecimalFormatter格式化它吗?
答案 0 :(得分:2)
这个经常出现......
挑选one of my past answers to an almost identical question
您要做的是使用DataFormatter class。你传递了一个单元格,它会尽力返回一个字符串,其中包含Excel为该单元格显示的内容。如果你传递一个字符串单元格,你将得到回来的字符串。如果您传递了一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回字符串。
对于您的情况,我假设数字单元格应用了整数格式规则。如果你要求DataFormatter格式化这些单元格,它会返回一个包含整数字符串的字符串。
答案 1 :(得分:1)
问题可能与Java有关,与POI无关。 由于您的调用返回了一个双精度数,
double val = cell.getNumericCellValue();
你可能想要这个
DecimalFormat df = new DecimalFormat("#");
int fractionalDigits = 2; // say 2
df.setMaximumFractionDigits(fractionalDigits);
double val = df.format(val);
答案 2 :(得分:0)
使用数字单元格中的double值创建一个BigDecimal,然后使用
BigDecimal.toPlainString()
函数,将其转换为纯字符串,然后在擦除值后将其存储回相同的单元格中,从而解决了数字值呈指数表示的整个问题。
下面的代码为我解决了这个问题。
Double dnum = cellContent.getNumericCellValue();
BigDecimal bd = new BigDecimal(dnum);
System.out.println(bd.toPlainString());
cellContent.setBlank();
cellContent.setCellValue(bd.toPlainString());
System.out.println(cellContent.getStringCellValue());
答案 3 :(得分:-2)
long varA = new Double(cellB1.getNumericCellValue()).longValue();
这将带来变量varA
中的确切值。