Apache POI Java 6 到 8 差异
Apache POI Java 6 to 8 Difference
我在 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);
但我得到了同样的行为。
我没有 java 8 ,但是 java 7 和以下 apache poi 库我没有问题(我认为问题是它的 apache poi 版本)。
public static void main(String[] args) {
try {
FileInputStream is = new FileInputStream(new File("C:\ook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheet("Sheet1");
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
System.out.println(cell.getNumericCellValue());//returns a double value so its ok
} catch (IOException e) {
e.printStackTrace();
}
finally{
}
}
Apache poi 库:
结果:
Excel 文件:
我在 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);
但我得到了同样的行为。
我没有 java 8 ,但是 java 7 和以下 apache poi 库我没有问题(我认为问题是它的 apache poi 版本)。
public static void main(String[] args) {
try {
FileInputStream is = new FileInputStream(new File("C:\ook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheet("Sheet1");
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
System.out.println(cell.getNumericCellValue());//returns a double value so its ok
} catch (IOException e) {
e.printStackTrace();
}
finally{
}
}
Apache poi 库:
结果:
Excel 文件: