2017-04-12 3 views
-1

Ich lese Daten aus einer Excel-Arbeitsmappe in einer C# -App mit der Excel.dll. Nach dem Lesen jeder Zeile füge ich diese Zeile zu einer DataTable hinzu. Wenn ich auf eine leere Zelle stoße, stürzt die App ab und gibt den folgenden Fehler aus:Fehler beim Lesen einer leeren Zelle in Excel

"Objektverweis nicht auf eine Instanz eines Objekts festgelegt."

Hier ist die Schleife, in der dieser Absturz auftritt:

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); 
} 

Das ist alles in einem try/catch-Block. Alles läuft gut in der ersten Eingabezeile (die keine leeren Zellen hat), aber in der zweiten Eingabezeile (wo die vierte Zelle leer ist) liest es die ersten drei Zellen und stürzt dann auf der SWITCH-Zeile ab und geht in meinen CATCH-Block .

Wie kann ich sehen, ob die aktuelle Zelle leer oder Null ist, damit ich diesen Fehler vermeiden kann?

Vielen Dank!

+0

Können Sie bitte mit Ihren vollständigen Stack-Trace aktualisieren. –

+0

System.NullReferenceException: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. bei ReadExcelWorksheet.Program.ReadWorksheet (DataTable dt, Zeichenfolge ExcelInput) in :: \ Projects \ ReadExcelWorksheet \ Program.cs: Zeile 64 – John

+0

Blick auf die Ihre Fehlermeldung, Akos ist richtig –

Antwort

1

Im Inneren des foreach, nach Ihrer if - break Aussage, könnten Sie einfach eine Nullprüfung hinzu:

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

Vielen Dank, Akos! Ich habe gestern einige andere Dinge ausprobiert, die viel mehr involviert waren. Schön, eine einfache Lösung zu sehen. Sehr geschätzt! – John

+0

Gerne helfen :) –

Verwandte Themen