2017-09-26 149 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