读取Excel中的Excel数字单元格值

时间:2013-05-10 13:02:19

标签: java excel apache-poi

当我读取excel数字单元格值时,我得到带小数的输出。例如:79读数为79.0,读数为0.00。我写的应用程序的代码是:

int type = cell.getCellType();
if (type == HSSFCell.CELL_TYPE_NUMERIC)
  System.out.println(cell.getNumericCellValue());

5 个答案:

答案 0 :(得分:14)

这个问题在Stack Overflow上出现了很多,所以建议您查看许多类似的问题以查看答案!

Excel将文件格式中的几乎所有数字都存储为浮点值,这就是为什么POI会为数字单元格返回一个双倍的原因,就像那里真正存在的那样。如果您希望它看起来像在Excel中一样,则需要将针对单元格定义的格式设置规则应用于该数字。因此,你想做同样的事情as in my answer here。引用:

  

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

     

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

您需要做的就是:

// Only need one of these
DataFormatter fmt = new DataFormatter();

// Once per cell
String valueAsSeenInExcel = fmt.formatCellValue(cell);

答案 1 :(得分:1)

我不是100%这会起作用,但我相信你所寻找的是DecimalFormat

答案 2 :(得分:1)

我假设你正在使用Apache POI。

你应该考虑和DataFormat一起玩。 Here是一些非常小的草案代码。

否则,如果工作簿中的数据一致,您可能希望将double返回的getNumericCellValue四舍五入为int

System.out.println((int)Math.round(cell.getNumericCellValue()));

答案 3 :(得分:0)

使用DataFormatter,它将自动检测单元格的格式并生成字符串输出

                    DataFormatter formatter = new DataFormatter();
                    String df2 = formatter.formatCellValue(cell);

答案 4 :(得分:0)

仍然有人对此有疑问,可以使用此 https://poi.apache.org/apidocs/dev/org/apache/poi/ss/util/NumberToTextConverter.html

NumberToTextConverter.toText(cell.getNumberiCellValue())