2012-03-30 14 views
7

Ich versuche, C# zu verwenden, Excel-Datei zu lesen, die den Datentyp gemischt hat. Im Folgenden meine Verbindungszeichenfolge istLesen von Excel InterMixed DataType ohne Ändern des Registrierungsschlüssels

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

Forschung mich gelehrt, dass die komplette Extended Properties in der Verbindungszeichenfolge soll

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

jedoch sein, war ich, dass String in Verbindung informiert, die TypeGuessRows=0hat keine Bedeutung als Wert wird entnommen werden, direkt aus der Registry. Daher muss ich den Schlüssel manuell ändern und diese Eigenschaft aus der Verbindungszeichenfolge entfernen.

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

Pfad:

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

Key:

TypGuessRows

Original-Wert = , um es in Veränderung zu machen arbeiten =

Ohne tun dies die IMEX nicht einmal hart arbeiten ich hinzufügen TypeGuessRows=0 in die Extended Properties.

Allerdings verbietet meine Firma die Änderung der Registrierungswert (streng). Mir wurde gesagt, ich solle Alternativen finden.

Kurz:

Gibt es eine Möglichkeit zu Lese vermischten Datentyp Excel Datei ohne mit zu jedem Registrierungsschlüssel ändern (das ist eine ziemlich gängige Praxis ist)?

Weiteres Thema:

Haben Sie diese Erfahrung vor? Gibt es Möglichkeiten, dass wir TypeGuessRows=0 aus der Verbindungszeichenfolge nur festlegen können, ohne den Registrierungsschlüssel zu ändern (meine obige Prämisse annullierend).

Wenn es nicht klappt mit OleDb:

Gibt es Alternativen neben OleDb?

Ich freue mich über jede Beratung oder Anregung.

Grüße

Antwort

6

Was können Sie tun, ist Header zu verlangen, die in der ersten Reihe von Excel und stellen Sie Verbindungszeichenfolge

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

Der Schlüssel hier ist HDR = No (NO HEADER) zu setzen, aber da Sie Header jetzt wird jede Spalte als String (Text) behandelt, und Sie können für jeden Zellenwert analysieren oder validieren. Natürlich müssen Sie die erste Zeile überspringen oder entfernen, da sie Header-Informationen enthält.

2

Statt OleDb der Verwendung weiß ich Excel Data Reader verwenden. Es funktioniert sehr gut! Sehr empfehlenswert!

+0

Große Entdeckung! Vielen Dank! – Bronek