2017-09-26 144 views
0

我有一个xlsx文件,我正在用apache poi 3.17阅读java 6.在一个实例中,我有一个值为123456789011的单元格。这个单元格作为NUMERIC CellTypeEnum单元格读入java。当我使用DataFormatter获得细胞的这样的值:Apache POI DataFormatter返回科学表示法

DataFormatter formatter = new DataFormatter(Locale.US); String strVal = formatter.formatCellValue(cell);

字符串值出来为“1.234567 + 11”。我需要单元格中的实际值为“123456789011”。我怎么弄到的?

我已经尝试在Java中使用BigDecimal来转换字符串,但返回“123456700000”,因为这是对给定信息可以做的最好的;这意味着我需要从实际的单元格对象中获取正确的值。我也尝试过使用cell.getNumericCellValue(),但是它返回一个double,它的极限太小而无法处理原始值,所以它被检索为“1.234567E11”,它与其他检索方法有相同的问题。

是否有办法从原始单元格中获取值作为字符串,因为它是在xlsx中输入的?我对原始的xlsx没有权力。

谢谢。

+1

为什么不使用Cell.getNumericCellValue()?它应该返回实际值作为double而不应用任何格式。 – centic

+0

这就是问题centic – user3813942

+0

尝试看看这里https://stackoverflow.com/questions/16098046/how-to-print-double-value-without-scientific-notation-using-java – matrix

回答

0

使用BigDecimal的toPlainString()方法。它采用科学记数法并将其转换为其相应的数字字符串值。

我试图这样做:(我有数目123456789011在单元格A1在我的片材,与细胞类型NUMERIC)

Row row = sheet.getRow(0); 
Object o = getCellValue(row.getCell(0)); 
System.out.println(new BigDecimal(o.toString()).toPlainString()); 

getCellValue方法是我的读取单元的通用方法:

public Object getCellValue(Cell cell) { 
     if (cell != null) { 
      switch (cell.getCellType()) { 
      case Cell.CELL_TYPE_STRING: 
       return cell.getStringCellValue(); 

      case Cell.CELL_TYPE_BOOLEAN: 
       return cell.getBooleanCellValue(); 

      case Cell.CELL_TYPE_NUMERIC: 
       return cell.getNumericCellValue(); 
      } 
     } 
     return null; 
    } 

希望这有助于!

+0

这解决了它,谢谢你,我永远都不会想到我自己。 – user3813942