2016-03-05 35 views
0

我嘗試使用NPOI庫讀取excel文件。爲什麼我會在Excel中讀取數值作爲字符串

下面是代碼:

public void ReadDataFromXL() 
     { 
      try 
      {     
       for (int i = 1; i <= sheet.LastRowNum; i++) 
       { 
        IRow row = sheet.GetRow(i); 
        for (int j = 0; j < row.Cells.Count(); j++) 
        { 
         var columnIndex = row.GetCell(j).ColumnIndex; 
         var cell = row.GetCell(j); 

         if (cell != null) 
         { 
          switch (cell.CellType) 
          { 
           case CellType.Numeric: 
            var val = cell.NumericCellValue; ; 

            break; 
           case CellType.String: 
            var str = cell.StringCellValue; 

            break; 
          } 

         } 
        } 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

這裏的.xlsx文件,我嘗試閱讀的內容:

enter image description here

正如你可以看到列X和列Y的數值列。 但是當我開始使用上面的代碼讀取這些列時,X和Y列中的一些數值已被代碼識別爲字符串值。

例如,在畫面中的細胞B4以上是數字類型,但是,上cell.CellType它顯示String和字符串的值是31.724732480727\n。 '\ n'被附加到值。

任何想法爲什麼一些數值顯示爲string和爲什麼'\ n'附加到值?

+0

'\ n'是一個換行符,是從某處複製/粘貼的數字,還是手動輸入的? – dognotdog

+0

如果您剛剛從excel中讀取數據,您可能需要使用OleDbConnection類。 –

+0

@dognotdog它是從file.The文件序列化 – Michael

回答

1

它看起來像列是字符串的,所以如果你想檢查爲雙數據類型(假設它的將是在num+'\n'格式,你可以試試下面的代碼片段的數據類型。

 String number = "1512421.512\n"; 
     double res; 
     if (double.TryParse(number.Substring(0, number.Length - 1), out res)) 
     { 
      Console.WriteLine("It's a number! " + res); 
     } 
+0

但想知道它從哪裏來 - 'n' – Michael

+0

這個數據來自哪裏?可能是,它可能來自一個電子表格,其中dat一個是複製/粘貼,這將解釋新行。 –

+0

好的,但爲什麼NPOI庫將它作爲數據的一部分(新行)? – Michael

相關問題