2014-08-31 39 views
0

我正在使用apache poi從excel文件讀取一些單元格,單元格的值是純數字,例如, 6944460000,即使我格式化單元格爲文本,程序一直讀取它們爲6.9 + EXXXExcel將數字轉換爲指數形式的文本

if (line.get(0) != null) { 
        int mpnCellType = line.get(0).getCellType(); 
        switch (mpnCellType) { 

         case HSSFCell.CELL_TYPE_NUMERIC: 
          mpn = (String.valueOf(line.get(0).getNumericCellValue())); 
          break; 
         case HSSFCell.CELL_TYPE_STRING: 
          mpn = (line.get(0).getStringCellValue()); 
          break; 
        } 

       } 

eventhough我檢查的細胞類型,我還是得到了指數形式,這意味着在源文件是這種形式在我讀之前,我怎麼能阻止這種轉換?

+1

我不熟悉Apache poi。但是excel在單元格中存儲值的方式是「純數字」。如果可以使用apache poi訪問源Excel單元格的.Text屬性,那麼應該按照格式化它的方式返回值。將Excel單元格的格式更改爲文本後,輸入數字值不會影響其存儲方式。 – 2014-08-31 11:12:23

+0

[excel字段值越來越3.0E9,我需要3000000000時試圖解析](可能重複)(http://stackoverflow.com/questions/25397377/values-of-excel-field-is-getting-3-0e9 -where-i-need-3000000000-when-trying-to-pa) – Gagravarr 2014-08-31 14:51:01

+0

你沒有正確地將數字轉換爲字符串。查看大約一百個重複問題中的一個,這些問題都提供了正確的方法來完成它 – Gagravarr 2014-08-31 14:52:23

回答

0

我相信羅森菲爾德是正確的。如果工作表是這樣的:

pic

然後POI是拿起顯示值,而不是在公式欄中所示的固有值。 一種方法是在運行poi之前修復單元格格式。試試這個小宏:

Sub FixFormats() 
    Dim r As Range 
    For Each r In ActiveSheet.UsedRange 
     If CStr(r.Value) <> r.Text Then 
      r.NumberFormat = 0 
     End If 
    Next r 
End Sub