读取Excel中的数字单元格值,如同在Java中一样

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

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

这个问题出现在堆栈溢出,所以你最好build议通过类似的许多看到那里的答案!

Excel以文件格式将几乎所有的数字都作为浮点值存储,这就是为什么POI会给你一个数字单元格的双精度数据,就像真正存在的那样。 如果您希望它看起来像在Excel中一样,则需要将针对单元格定义的格式规则应用于该数字。 因此,你要做的和我在这里的回答完全一样。 去引用:

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

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

所有你需要做的是:

 // Only need one of these DataFormatter fmt = new DataFormatter(); // Once per cell String valueAsSeenInExcel = fmt.formatCellValue(cell); 

我不是100%,这将工作,但我相信你要找的是DecimalFormat 。

我假设你正在使用Apache POI。

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

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

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

如下所示使用DataFormatter,它将自动检测单元格的格式并生成string输出

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