3

When I am reading excel numeric cell values, i am getting the output with decimals. eg: 79 is reading as 79.0, 0.00 reading as 0.0. The code for my application I have written is:

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

5 回答 5

15

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

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

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

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

您需要做的就是:

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

// Once per cell
String valueAsSeenInExcel = fmt.formatCellValue(cell);
于 2013-05-10T14:25:36.593 回答
1

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

于 2013-05-10T13:08:08.857 回答
1

我假设您使用的是 Apache POI。

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

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

System.out.println((int)Math.round(cell.getNumericCellValue()));
于 2013-05-10T13:08:52.087 回答
1

仍然有人面临这个问题可以使用这个 https://poi.apache.org/apidocs/dev/org/apache/poi/ss/util/NumberToTextConverter.html

NumberToTextConverter.toText(cell.getNumberiCellValue())
于 2020-10-08T11:49:38.033 回答
0

如下使用DataFormatter,它会自动检测单元格的格式并产生字符串输出

                    DataFormatter formatter = new DataFormatter();
                    String df2 = formatter.formatCellValue(cell);
于 2014-08-13T03:22:07.690 回答