2014-08-31 284 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 
相关问题