2017-09-20 74 views
0

我在apache poi 3.12和Java 1.6中使用HSSFWorkbook将.xls文件转换为制表符分隔的文本文件。在我processRecord方法我得到使用FormatTrackingHSSFListener从数量字段的值在NumberRecord,numrec,在下面的代码:Apache POI Java 6到8区别

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);

,但我得到了相同的行为。

+0

如果您尝试最新版本的Apache POI,目前3.17会发生什么情况? – Gagravarr

+0

大概你已经检查过了,但是你可以确认在java版本中numrec值总是相同的吗?你可以为它编写一个单元测试用例。 – Anon

+0

更新到最新poi(3.17)做了这份工作,谢谢大家 – user3813942

回答

0

我没有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库:

enter image description here

结果:

enter image description here

Excel文件:

enter image description here