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);
}

3voto

jordanhill123 Punkte 4053

Ich hatte das gleiche Problem (mit der ACE.OLEDB) und was es für mich behoben war dieser Link:

http://support.microsoft.com/kb/2459087

Das Wesentliche ist, dass die Installation mehrerer Office-Versionen und verschiedener Office-SDKs, Assemblies usw. dazu geführt hat, dass der Verweis auf ACEOleDB.dll in der Registrierung auf den Ordner OFFICE12 statt auf OFFICE14 in

C:\Program Dateien \Common Dateien \Microsoft Gemeinsame \OFFICE14\ACEOLEDB.DLL

Aus dem Link:

Alternativ können Sie den Registrierungsschlüssel ändern und den DLL-Pfad an Ihre Access-Version anpassen.

Access 2007 sollte OFFICE12 verwenden, Access 2010 - OFFICE14 und Access 2013 - BÜRO15

(OS: 64bit Office: 64bit) oder (OS: 32bit Office: 32bit)

Schlüssel: HKCR \CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \InprocServer32\

Wert Name: (Standard)

Wert Daten: C:\Program Dateien \Common Dateien \Microsoft Gemeinsame \OFFICE14\ACEOLEDB.DLL

(OS: 64bit Office: 32bit)

Schlüssel: HKCR \Wow6432Node\CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \InprocServer32\

Wert Name: (Standard)

Wert Daten: C:\Program Dateien (x86) \Common Dateien \Microsoft Gemeinsame \OFFICE14\ACEOLEDB.DLL

2voto

MMJ Punkte 439

Ich weiß, dass dies ein sehr alter Beitrag ist, aber ich kann auch meinen Beitrag dazu leisten, wie ich dieses Problem lösen konnte.

Ich verwende auch "Microsoft.ACE.OLEDB.12.0" als Provider. Als mein Code versuchte, die XLSX-Datei zu lesen, erhielt er die Fehlermeldung "External table is not in the expected format". Wenn ich die Datei jedoch in Excel geöffnet ließ und der Code dann versuchte, sie zu lesen ... funktionierte es.

LÖSUNG: Ich verwende Office 365 für Unternehmensdokumente, und in meinem Fall war die Lösung sehr einfach: Ich musste nur die Empfindlichkeit des Dokuments deaktivieren und es auf "öffentlich" setzen. Detail: Auch nach dem Speichern als "öffentlich" blieb das grüne Häkchen bei "Interner Gebrauch" markiert, aber das Problem war danach gelöst.

enter image description here

2voto

Tehscript Punkte 2546

Wenn die Datei schreibgeschützt ist, entfernen Sie sie einfach und es sollte wieder funktionieren.

2voto

John M Punkte 13482

Ich habe Fehler beim Lesen einer XLSX-Arbeitsmappe durch Drittanbieter und Oledb erhalten. Das Problem scheint ein ausgeblendetes Arbeitsblatt zu sein, das einen Fehler verursacht. Wenn ich das Arbeitsblatt ausblende, kann ich die Arbeitsmappe importieren.

2voto

John M. Black Punkte 106

Dieser Fehler ist auch aufgetreten, wenn ich versucht habe, komplexe INDIRECT()-Formeln auf dem Blatt zu verwenden, das importiert wird. Ich habe dies bemerkt, weil dies der einzige Unterschied zwischen zwei Arbeitsmappen war, von denen eine importiert wurde und die andere nicht. In beiden Fällen handelte es sich um XLSX-Dateien aus 2007+, und es war die 12.0-Engine installiert.

Ich bestätigte, dass dies das Problem war:

  • Erstellen einer Kopie der Datei (das Problem trat immer noch auf, es war also kein Unterschied beim Speichern unter einem anderen Namen)
  • Auswählen aller Zellen im Blatt mit den indirekten Formeln
  • Nur als Werte einfügen

und der Fehler ist verschwunden.

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