8 Stimmen

Lesen von Excel InterMixed DataType ohne Änderung des Registrierungsschlüssels

Ich versuche, C# zu verwenden, um eine Excel-Datei zu lesen, die gemischte Datentypen enthält. Hier ist mein Verbindungszeichenfolge

var path = //xls Standort
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'");

Forschung hat mich gelehrt, dass die vollständigen Extended Properties in der Verbindungszeichenfolge sein sollten

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

Allerdings wurde mir mitgeteilt, dass in der Verbindungszeichenfolge die TypeGuessRows=0 keine Bedeutung hat, da der Wert direkt aus der Registrierung abgeleitet wird. Daher muss ich den Schlüssel manuell bearbeiten und diese Eigenschaft aus der Verbindungszeichenfolge entfernen.

Der bestimmte Registrierungsschlüssel, der beteiligt war, ist:

Pfad:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

Schlüssel:

TypeGuessRows

Ursprünglicher Wert = 8, um es funktionieren zu lassen, ändere in = 0

Ohne dies wird IMEX nicht funktionieren, auch wenn ich TypeGuessRows=0 zu den Extended Properties hinzufüge.

Allerdings verbietet mein Unternehmen das Ändern des Registrierungswerts (streng). Mir wurde gesagt, Alternativen dafür zu finden.

Kurz gesagt:

Gibt es einen Weg, eine Excel-Datei mit gemischten Datentypen zu lesen, ohne einen Registrierungsschlüssel zu ändern (was recht häufig vorkommt)?

Weiteres Thema:

Hast du das schon erlebt? Gibt es Möglichkeiten, dass wir TypeGuessRows=0 nur von der Verbindungszeichenfolge aus setzen können, ohne den Registrierungsschlüssel zu ändern (was meine obige Annahme ausschließt).

Wenn es mit OleDb nicht funktioniert:

Gibt es Alternativen neben OleDb?

Ich schätze jeden Rat oder Vorschlag.

Grüße

8voto

Vlad Bezden Punkte 71128

Was Sie tun können, ist, die Kopfzeile in der ersten Zeile von Excel zu benötigen und die Verbindungszeichenfolge auf Folgendes festzulegen

var MyConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + pfad + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");

Der Schlüssel hier ist, HDR=No (KEIN HEADER) einzustellen, jedoch werden alle Spalten als Zeichenfolge (Text) behandelt, da Sie jetzt einen Header haben, und Sie können das Parsen oder die Validierung des Werts jeder Zelle durchführen. Natürlich müssen Sie die erste Zeile überspringen oder entfernen, da sie Headerinformationen enthält.

2voto

rofans91 Punkte 2910

Statt OleDb zu verwenden, benutze ich jetzt Excel Data Reader. Es funktioniert großartig! Sehr zu empfehlen!

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