3

我正在使用 Apache POI 3.9 进行 XLS/XLSX 文件处理。

在 XLS 表中,有一列带有数值,例如“3000053406”。

当我用 POI 阅读它时...

cell.getNumericCellValue()

它给了我像“3.00E+08”这样的价值。这在我的应用程序中造成了巨大的问题。

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

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

4

4 回答 4

2

这个经常出现....

选择我过去对一个几乎相同的问题的答案之一

您要做的是使用DataFormatter 类。您将此单元格传递给它,它会尽力返回一个字符串,其中包含 Excel 会为您显示该单元格的内容。如果你给它传递一个字符串单元格,你会得到这个字符串。如果您传递一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回字符串。

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

于 2012-12-29T09:05:46.223 回答
1

问题可能与 Java 严格相关,也与 POI 无关。由于您的电话返回双倍,

double val = cell.getNumericCellValue();

你可能想得到这个

DecimalFormat df = new DecimalFormat("#"); int fractionalDigits = 2; // say 2 df.setMaximumFractionDigits(fractionalDigits); double val = df.format(val);

于 2014-10-13T12:16:24.280 回答
0

使用数字单元格中的双精度值创建 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());
于 2020-04-29T14:15:24.077 回答
-2

long varA = new Double(cellB1.getNumericCellValue()).longValue(); 这将在 variable 中带来确切的值 varA

于 2016-01-20T06:03:28.610 回答