2017-04-12 92 views
-1

我正在使用Excel.dll從C#應用程序的Excel工作簿中讀取數據。讀完每一行後,我將該行添加到DataTable中。當我遇到空白單元格時,應用程序崩潰,拋出以下錯誤:在Excel中讀取空白單元格時發生錯誤

「對象引用未設置爲對象的實例。」

下面是發生這種崩潰的循環:

foreach (var row in worksheet.Rows.Skip(1)) 
{ 
    DataRow dr = dt.NewRow(); 
    int cellNumber = 0; 
    foreach (var cell in row.Cells) 
    { 
     cellNumber++; 
     if (cellNumber > 6) 
      break; 
     switch (cell.ColumnIndex) 
     { 
      case 0: 
       dr["BatchID"] = cell.Value; 
       break; 
      case 1: 
       dr["RecID"] = cell.Value; 
       break; 
      case 2: 
       dr["Rejection"] = cell.Value; 
       break; 
      case 3: 
       dr["Comment"] = cell.Value; 
       break; 
      case 4: 
       dr["Logged"] = double.Parse(cell.Value); 
       break; 
      case 5: 
       dr["Modified"] = cell.Value; 
       break; 
     } 
    } 
    dt.Rows.Add(dr); 
} 

這是所有內部的try/catch塊。在第一個輸入行(沒有空白單元格)上,一切運行良好,但在第二個輸入行(第四個單元格爲空)處,它讀取前三個單元格,然後在SWITCH行上崩潰,進入我的CATCH塊。

如何查看當前單元格是空白還是空白,以便我可以避免此錯誤?

非常感謝!

+0

可以請你完整的堆棧跟蹤更新。 –

+0

System.NullReferenceException:未將對象引用設置爲對象的實例。 at ReadExcelWorksheet.Program.ReadWorksheet(DataTable dt,String excelInput)in :: \ Projects \ ReadExcelWorksheet \ Program.cs:line 64 – John

+0

看着你的錯誤信息,Akos是正確的 –

回答

1

foreach裏面,你if - break語句之後,你可以簡單地添加一個空檢查:

if (cell==null) 
{ 
    continue; 
} 
+0

謝謝你,阿科斯!我昨天嘗試了其他幾件事情,涉及更多。很高興看到簡單的解決方案。非常感激! – John

+0

高興地幫助:) –

相關問題