Apache POI:如何格式化数字单元格值

时间:2012-12-29 07:48:28

标签: apache-poi

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

在XLS表格中,有一个数字值为“3000053406”的列。

当我用POI阅读它时..

cell.getNumericCellValue()

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

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

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

4 个答案:

答案 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中的确切值。