169 Stimmen

Excel "Die externe Tabelle hat nicht das erwartete Format".

Ich versuche, eine Excel (xlsx)-Datei mit dem unten stehenden Code zu lesen. Ich erhalte die Fehlermeldung "External table is not in the expected format.", es sei denn, ich habe die Datei bereits in Excel geöffnet. Mit anderen Worten, ich muss die Datei zuerst in Excel öffnen, bevor ich sie aus meinem C#-Programm lesen kann. Die xlsx-Datei befindet sich auf einer Freigabe in unserem Netzwerk. Wie kann ich die Datei lesen, ohne sie zuerst öffnen zu müssen? Vielen Dank

string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
    DataSet ds = new DataSet();
    adaptor.Fill(ds);
}

255voto

FAtBalloon Punkte 4410

Die Meldung "Externe Tabelle hat nicht das erwartete Format" tritt normalerweise auf, wenn versucht wird, eine Excel 2007-Datei mit einer Verbindungszeichenfolge zu verwenden, die: Microsoft.Jet.OLEDB.4.0 und Erweiterte Eigenschaften=Excel 8.0

Die Verwendung der folgenden Verbindungszeichenfolge scheint die meisten Probleme zu lösen.

public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

28voto

Trex Punkte 289

Danke für diesen Code :) Ich weiß ihn wirklich zu schätzen. Funktioniert bei mir.

public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

Wenn Sie also eine unterschiedliche Version einer Excel-Datei haben, erhalten Sie den Dateinamen, wenn er die Erweiterung .xlsx verwenden Sie dies:

Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

und wenn es sich um .xls verwenden:

Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""

16voto

cederlof Punkte 6841

(Ich habe zu wenig Ansehen, um zu kommentieren, aber dies ist ein Kommentar zu JoshCabas Eintrag, der die Ace-Engine anstelle von Jet für Excel 2007 verwendet)

Wenn Sie Ace noch nicht auf Ihrem Rechner installiert/registriert haben, können Sie es hier herunterladen: https://www.microsoft.com/en-US/download/details.aspx?id=13255

Dies gilt auch für Excel 2010.

9voto

Joseph Ding Punkte 586

Fügen Sie einfach meinen Fall hinzu. Meine xls-Datei wurde mit einer Datenexportfunktion von einer Website erstellt, die Dateierweiterung ist xls, sie kann normalerweise mit MS Excel 2003 geöffnet werden. Aber sowohl Microsoft.Jet.OLEDB.4.0 als auch Microsoft.ACE.OLEDB.12.0 haben eine "External table is not in the expected format"-Ausnahme.

Schließlich ist das Problem, genau wie die Ausnahme sagte, "es ist nicht in das erwartete Format". Sie heißt zwar xls, aber wenn ich sie mit einem Texteditor öffne, ist sie eigentlich eine wohlgeformte Html-Datei, alle Daten sind in einer <table>, jedes <tr> ist eine Zeile und jedes <td> ist eine Zelle. Dann denke ich, dass ich sie in einer Html-Datei parsen kann.

6voto

Kamran Punkte 651

Ich hatte das gleiche Problem, das mit diesen Schritten behoben wurde:

1.) Klicken Sie auf Datei

2.) Wählen Sie "Speichern unter".

3.) Klicken Sie auf die Dropdown-Liste (Typ "Speichern unter")

enter image description here

4.) Wählen Sie Excel 97-2003 Arbeitsmappe

enter image description here

5.) Klicken Sie auf die Schaltfläche Speichern

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X