ich eine Excel-Datei in dieser Form erhalten haben:Quirky SELECT aus Excel-Datei über OleDbDataAdapter-Methode (C#)
Column 1 Column 2 Column 3
data1 data2
data1 data2
data1 data2
data1 data2
data1 data2 data3
Das heißt, die ganze Spalte 3 ist leer, bis auf die letzte Zeile. Ich greife auf die Excel-Datei über OleDbDataAdapter, eine DataTable zurück: Hier ist der Code.
query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;
Der Punkt ist in diesem Szenario eine Datatable meines Code mit nur Spalte gibt 1 und Spalte 2.
Meine Vermutung ist, dass Jetmodul Spaltentyp vom Typ der ersten Zelle in jedem abzuleiten versucht Säule; Da der erste Wert null ist, wird die gesamte Spalte ignoriert.
Ich habe versucht, Nullen zu füllen, und dieser Code gibt tatsächlich alle drei Spalten zurück; Dies ist offensichtlich die am wenigsten bevorzugte Lösung, da ich eine große Anzahl von kleinen Dateien verarbeiten muss.
Das Umkehren des Auswahlbereichs (von "A1: C5" bis "C5: A1") funktioniert ebenfalls nicht. Ich suche etwas eleganteres.
Ich habe bereits ein paar Beiträge gefunden, die sich mit Typ-Mismatch beschäftigen (Varchar-Zellen in int-Spalten und umgekehrt), aber tatsächlich nichts gefunden haben, was mit diesem zusammenhängt.
Danke fürs Lesen!
bearbeiten
seltsame Verhalten wieder. Ich muss hauptsächlich an Excel 2003 .xls-Dateien arbeiten, aber da diese Frage beantwortet wurde, dachte ich, ich könnte meinen Code gegen Excel 2007 .xslx-Dateien testen. Die Verbindungszeichenfolge ist folgende:
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";
ich die Ausnahme „Externe Tabelle nicht im erwarteten Format ist“, die ich denke, die Standard-Ausnahme ist, wenn ein Konflikt Version ist zwischen ACE/JET und die Datei wird geöffnet.
Der String
Provider=Microsoft.ACE.OLEDB.12.0
bedeutet, dass ich die neueste Version von OLEDB verwenden, habe ich einen kurzen Blick um und diese Version verwendet wird überall dort Notwendigkeit, .xlsx-Dateien zu verbinden ist.
Ich habe versucht mit nur einem Vanille-Anbieter (nur Excel 12.0, ohne IMEX oder HDR), aber ich bekomme die gleiche Ausnahme.
Ich bin auf .NET 2.0.50727 SP2, vielleicht Zeit für ein Upgrade?
Also gibt es keine Header auf den Spalten in Excel? Und hast du den IMEX-Switch an der Verbindung ausprobiert? – Sorax
Es gibt Header, aber ich wähle den Teil der Tabelle aus, der nur die Daten enthält, die horizontale und vertikale Header vermeiden. – SimoneF