【发布时间】:2017-09-20 14:03:01
【问题描述】:
我在 apache poi 3.12 和 Java 1.6 中使用 HSSFWorkbook 将 .xls 文件转换为制表符分隔的文本文件。在我的 processRecord 方法中,我使用 NumberRecord numrec 上的 FormatTrackingHSSFListener 从数字字段中获取值,代码如下:
String value = formatListener.getFormatString(numrec);
这需要一个值,例如 21.9,然后将其四舍五入为最接近的整数。我的问题是,当我更改为运行 Java 1.8 的新服务器时,该值被截断而不是四舍五入,因此 21.9 变为 21 而不是 22。我浏览了 apache 的 poi 文档,他们没有提到更改行为,所以我要求回答以下问题:
- 为什么会发生这种情况? (最不重要)
- 在 Java 1.8 中,有没有办法检索该值以便舍入而不是截断?
- 有没有办法以原始形式检索值而不进行舍入或截断?
我已经尝试过另一种从 xls 文件中获取值的方法:
String value = new DataFormatter().formatCellValue(cell);
但我得到了相同的行为。
【问题讨论】:
-
如果您尝试最新版本的 Apache POI(目前为 3.17)会发生什么?
-
可能您已经检查过了,但您能确认 java 版本之间的 numrec 值始终相同吗?你可以为它写一个单元测试用例。
-
更新到最新的 poi (3.17) 完成了这项工作,谢谢大家
标签: java excel apache apache-poi xls