Hallo zusammen.
Ich habe ein tool, welches Excel-Daten ausliest und diese zur weiteren
Verarbeitung anbietet. Gelöst über folgenden Code (Ausschnitt):
1 | // create new OLEdb connection
|
2 | OleDbConnection oledbCon = OpenOledbConnection(OledbProvider, filePath);
|
3 | // get all tables
|
4 | DataTable sheets = oledbCon.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
|
5 | // add all sheets to DataTable
|
6 | foreach (DataRow sheet in sheets.Rows)
|
7 | {
|
8 | string tableName = sheet["Table_Name"].ToString();
|
9 | string sql = "SELECT * FROM [" + tableName + "]";
|
10 | OleDbDataAdapter adap = new OleDbDataAdapter(sql, oledbCon);
|
11 | dap.Fill(ds, tableName);
|
12 | // close connection
|
13 | oledbCon.Close();
|
"ds" ist ein DataSet, der connection string sieht wie folgt aus:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\some.xls;Extended
Properties="Excel 8.0;HDR=No;IMEX=1"
Problem: das ganze funktioniert NUR so lange die Anzahl der Spalten
nicht zu groß ist. Jetzt hatte ich den Fall, dass eine Excel-Datei ein
"korruptes" sheet hatte ( in der Spalte 200... irgendwas stehen, was
aber keine Nutzerdaten waren ). Dies führt natürlich zu einer Exception
"zu viele Felder definiert".
Frage:
Kann man die Anzahl der Spalten beim Lesen direkt begrenzen? Ich würde
am liebsten nämlich trotzdem lesen können und dem User an anderer Stelle
mitteilen, dass womöglich nicht alle Splten enthalten sind, anstatt dass
das sheet komplett verworfen wird.