Problem mit der OleDbDataAdapter-Objekt zum abrufen von Daten aus einem Excel-Blatt
Erste, ich möchte sagen, dass ich bin auf tiefem Wasser hier, da bin ich gerade dabei einige änderungen an code, die geschrieben werden von jemand anderem in der Firma, mit OleDbDataAdapter zu "sprechen", um Excel -, und ich bin nicht vertraut mit dieser. Gibt es einen Fehler gibt, kann ich einfach nicht Folgen.
Ich versuche, einen OleDbDataAdapter zu Lesen, in eine excel-Datei mit etwa 450 Zeilen.
In den code das so gemacht:
connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source='" + path + "';" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"");
connection.Open();
OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCommand.CommandText, connection);
objAdapter.Fill(objDataSet, "Excel");
foreach (DataColumn dataColumn in objTable.Columns) {
if (dataColumn.Ordinal > objDataSet.Tables[0].Columns.Count - 1) {
objDataSet.Tables[0].Columns.Add();
}
objDataSet.Tables[0].Columns[dataColumn.Ordinal].ColumnName = dataColumn.ColumnName;
objImport.Columns.Add(dataColumn.ColumnName);
}
foreach (DataRow dataRow in objDataSet.Tables[0].Rows) {
...
}
Alles scheint zu funktionieren gut, außer für eine Sache. Die zweite Spalte ist gefüllt mit meist vierstelligen Nummern, wie 6739, 3920 und so, aber fice Zeilen alphanumerische Werte wie 8201NO und 8205NO. Die fünf Zellen sind gemeldet, dass blanko-Inhaltsverzeichnis, anstatt Ihre alphanumerische Inhalte. Ich habe in excel alle Zellen in dieser Spalte markiert sind, als Text.
Dies ist eine xls-Datei, die durch die Art und Weise, und nicht xlsx.
Tun haben jedermann keine Ahnung, warum diese Zellen sind dargestellt als Lücke in der DataRow, aber die numerischen sind gezeigt in Ordnung? Es gibt andere Spalten mit alphanumerischen Inhalten, die gezeigt werden just fine.
InformationsquelleAutor | 2010-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was passiert, ist, dass excel versucht, einen Datentyp zuweisen, der spreadsheet-Spalte basierend auf den ersten mehrere Werte in dieser Spalte. Ich vermute, dass, wenn man sich die Eigenschaften, die in dieser Spalte wird sagen, es ist eine numerische Spalte.
Das problem kommt, wenn Sie versuchen, query, die Tabelle mit jet. Wenn es denkt, dass es den Umgang mit numerischen Spalte und es findet ein varchar-Wert ist es ruhig, gibt nichts zurück. Nicht einmal eine kryptische Fehlermeldung zu gehen.
Als möglich zu umgehen, können Sie einen alpha-numerischen Werte in die erste Zeile der Daten und versuchen Sie dann Parsen. Ich vermute, Sie wird anfangen, die Werte für den alpha-numerischen Zeilen dann...
Werfen Sie einen Blick auf dieser Artikel. Es geht mehr ins detail zu diesem Thema. es spricht auch über eine mögliche Arbeit um, das ist:
Sehr hinterhältig. Wenn es funktioniert, es funktioniert!
InformationsquelleAutor Abe Miessler
IMEX=1
bedeutet "Lesen gemischte Daten als text."Gibt es einige Fallstricke, aber. Jet wird nur einige Zeilen, um zu bestimmen, ob die Daten gemischt wird, und wenn ja, geschieht diese Zeilen sind alle numerischen, bekommst du dieses Verhalten.
Sehen connectionstrings.com details:
Vielen Dank für diese Informationen. Es funktionierte, aber war sehr langsam, also musste ich gehen mit dem "Lesen und entsorgen header" trick statt.
InformationsquelleAutor GSerg
Ich würde raten von der Verwendung der OleDb-Datenprovider Zeug, um Zugriff auf Excel, wenn Sie Ihr helfen können. Ich habe nichts, aber Probleme, aus genau den Gründen, dass andere haben darauf hingewiesen. Die performance eher grausam als gut, wenn Sie Umgang mit großen Tabellen.
Könnten Sie versuchen, die open-source-Lösung:
http://exceldatareader.codeplex.com/
InformationsquelleAutor MarkPflug