2012-04-10 10 views
1

Ich importiere Excel in DataTable. Die Excel-Datei enthält 50x7 Zellen mit Daten. Das Problem besteht darin, dass die Fill() - Methode 368 (?) Zeilen importiert, ungeachtet der Tatsache, dass die Daten in den ersten 50 von ihnen sind. Irgendeine Idee, was könnte das Problem sein?OleDbDataAdapter Füllen Methode importiert mehr Zeilen

Ich verwende OleDbDataAdapter für den Import.

connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0;"; 
string commandString = "select * from [" + worksheetName + "]"; 
OleDbDataAdapter adapter = new OleDbDataAdapter(commandString, connectionString); 
DataTable fileTable = new DataTable(); 
adapter.Fill(fileTable); 
+0

Haben Sie versucht, Zeilen von 51 bis 369 zu löschen; im Excel-Arbeitsblatt, um zu sehen, ob dies das Problem löscht? –

+0

Was bedeutet Löschen von Zeilen in Excel? Es gibt leere Zeilen und wenn ich in der Datei nach unten scrolle, erscheinen mehr Zeilen. Ich glaube nicht, dass sie wirklich in der Datei sind. Korrigieren Sie mich, wenn ich falsch liege –

+1

Ich hatte ähnliche Probleme mit Excel-Blättern, wobei es aussieht, als gäbe es nichts in den Zeilen, aber aus irgendeinem Grund werden sie beim Importieren behandelt. Auch wenn es so aussieht, als ob es nichts zu löschen gibt, ist es immer einen Versuch wert. –

Antwort

1

Versuchen Sie, diese leere Zellen aus den DataTable zu entfernen:

adapter.Fill(fileTable); 
fileTable = fileTable.AsEnumerable() 
      .Where(row => !row.ItemArray.All(f => f is System.DBNull || String.IsNullOrWhiteSpace(f.ToString()))) 
      .CopyToDataTable(); 

Beachten Sie, dass es entfernt auch leere Zeilen innerhalb des Blattes.

+0

'System.Data.DataTable' enthält keine Definition für 'AsEnumerable' und keine Erweiterungsmethode 'AsEnumerable' akzeptiert ein erstes Argument vom Typ 'System. Data.DataTable 'gefunden werden kann (fehlt eine using-Direktive oder eine Assemblyreferenz?) –

+0

Wenn Sie .NET 2.0 oder niedriger verwenden, können Sie LINQ nicht verwenden. Dann können Sie Ihre DataTable manuell über einen OleDbCommand Reader erstellen. –

+0

Nein, ich verwende NET 4.0 –

Verwandte Themen