gpt4 book ai didi

java - Apache POI : Getting wrong number/string values reading from xlsx while xls is workfing fine

转载 作者:行者123 更新时间:2023-11-29 08:48:12 25 4
gpt4 key购买 nike

我有两张 Excel 表格(一张 .xls,一张 .xlsx),单元格 A1 中的内容为“1234567891234.56”。

现在我正尝试将此内容添加到我的 java 应用程序中,使用 Apache POI,如下所示:

    private String getValue(Cell myCell, int myCelltype)
throws CellAccessException {
try {

switch (myCelltype) {

case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:

return myCell.getStringCellValue();

...

首先,无论我如何格式化单元格本身,CellType (myCell.getCellType()) 始终为 1(字符串)。

其次,当我从 xlsx 读取时,我得到“1234567891234.5601”,而从 xls 读取时,我得到“1234567891234.56”,这是我期望的结果。

另一个示例是文件中的“12345678912345.6”和从 xlsx 读取的结果“12345678912345.602”。

我不知道是什么导致了我的问题,而且似乎没有其他人遇到过类似的问题。

如果您能提供任何帮助,我将不胜感激。

在此先感谢德国的问候。澳洲语

编辑:感谢评论和回答。可悲的是,格式化返回值并没有帮助,因为问题是从 Excel 工作表中获取正确的值。在研究不变的 CELL_TYPE 时,我做了一个奇怪的观察:当我从 xls(!) 文件中读取时,我得到了正确的字符串值(在本例中为 1.23456789123456E+20 )。接下来,将此 String 转换为 Double。

String content = myCell.getStringCellValue();
System.out.println(result + "#" +result.length());
Double dresult = Double.valueOf(result);
System.out.println(dresult);

输出看起来像这样:

1.23456789123456E+20#20

1.2345678912345601E20

所以我开始思考,我从 xlsx 中的单元格中读取了这个错误,这些单元格是数字但标记为单元格类型 STRING,并将 String 转换为 Double。 Double 有什么问题吗?也许我们这里有一些旧的 Java 版本并且 Double 坏了。我不认为这是 poi 的错,因为它是 3.10 FINAL,应该可以正常工作。还是 Double 在转换这个我不明白的字符串时做了什么?我是 Java 和这份工作的新手……只是在挣扎。

最佳答案

我不确定 xls 和 xlsx 中的默认十进制格式是否发生了变化。然而只是一个建议,如果不固定小数位,你应该从你自己的角度来固定它,比如......

case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:{
DecimalFormat df = new DecimalFormat("##.##");
return df.format(myCell.getNumericCellValue());

关于java - Apache POI : Getting wrong number/string values reading from xlsx while xls is workfing fine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com