2012-12-29 233 views
3

我使用Apache POI 3.9进行XLS/XLSX文件处理。Apache POI:如何格式化数值单元格值

在XLS工作表中,有一个数值类似“3000053406”的列。

当我..

cell.getNumericCellValue() 

与POI读它,它给了我的价值,如 “3.00E + 08”。这在我的应用程序中造成了巨大的问

如何在Apcahe POI中读取数据时设置数字格式?

有一种方法,我知道是将列设置为“文本”类型。但是我想知道在阅读数据时Apache POI端是否还有其他方法。或者我们可以使用简单的java DecimalFormatter来格式化它?

回答

2

这一次出现非常频繁....

采摘one of my past answers to an almost identical question

你想要做的是使用DataFormatter class。您将这个单元格传递给它,并尽可能返回一个包含Excel将显示给该单元格的字符串的字符串。如果你将它传递给一个字符串单元格,你会得到字符串。如果您将格式化规则应用于数字单元格,它将根据它们格式化数字并将字符串返回。

对于你的情况,我假设数字单元格有一个整数格式化规则适用于他们。如果您要求DataFormatter格式化这些单元格,它会返回一个包含整数字符串的字符串。

+0

感谢您的回复。在这里,我有点困惑,但如何在DataFormatter类中设置格式。根据我的理解,我只需要结果精度不高的数字,所以我需要将格式设置为########。我对吗 ? ..请确认 –

+0

您能否提供一些小存根类型的东西来加深理解。我尝试使用DataFormatter,但我无法理解如何在DataFormatter类中设置格式。这里我使用的是xls和xlsx格式,所以需要使用HSSFDataFormatter?和cellStyle.setDataFotmat(简称)是要求短期价值。我如何检索这个短期价值? –

+0

你不需要设置任何东西 - 它将Excel中应用的格式规则提取到单元格中,并使用它们来格式化数字 – Gagravarr

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

long varA = new Double(cellB1.getNumericCellValue()).longValue(); 这会带来变数varA精确值。

相关问题