Frage

Ich verwende OleDB, um eine Excel-Datei zu lesen.Eine der Spalten hat ein „Common“-Format und enthält sowohl Zeichenfolgen mit Buchstaben als auch Werte, die nur aus Zahlen bestehen.Zeichenfolgenwerte werden problemlos abgerufen, reine numerische Werte werden jedoch abgerufen DBNull.

Wie löst man?

Zum Öffnen verwende ich die folgende Verbindungszeichenfolge Excel 2003-Datei (xls):

"Provider=Microsoft.Jet.OLEDB.4.0;
 Data Source=C:\\file.xls;
 Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
War es hilfreich?

Lösung

Ich habe auf der Website von Microsoft eine Dokumentation gefunden, die auf Ihr Szenario zutrifft.Sie empfehlen, alle Zahlen in Zeichenfolgen umzuwandeln.

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

Wie bereits erwähnt, muss ADO den Datentyp für jede Spalte in Ihrem Excel-Arbeitsblatt oder -Bereich erraten.(Die Formatierungseinstellungen für Excel-Zellen haben hierauf keinen Einfluss.) Ein ernstes Problem kann auftreten, wenn in derselben Spalte numerische Werte mit Textwerten gemischt sind.Sowohl der Jet als auch der ODBC-Anbieter geben die Daten des Mehrheitstyps zurück, geben jedoch NULL-Werte (leer) für den Minderheitsdatentyp zurück.Wenn die beiden Typen in der Spalte gleichermaßen gemischt sind, wählt der Anbieter numerische statt Text.

Zum Beispiel:

* In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values.
* In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values.
* In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values.

Andere Tipps

Ich habe das gleiche Problem, aber mit String-Werten.Numerische Werte werden zurückgegeben, Zeichenfolgenwerte werden jedoch als NULL zurückgegeben.Ich möchte numerische Werte als Zeichenfolgenwerte laden.Die Spalte kann Ziffern und nicht numerische Codes enthalten (Beispiel:100344567 und PRD001X01).

Der Excel-Treiber geht davon aus, dass die Spalte vom Typ „numerisch“ ist, da die Werte in den ersten 8 Zeilen vom Typ „numerisch“ sind.

Selbst wenn ich die Zellen als Text definiere (Zelle formatieren), funktioniert es nicht.

Um den Treiber zu zwingen, die Spalte als Zeichenfolge zu „sehen“, habe ich einfach ein Anführungszeichen vor den numerischen Wert gesetzt ('100344567).Dadurch wird der numerische Wert in eine Zeichenfolge umgewandelt.

Dieser Wert von 8 Zeilen ist in der Registrierung HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ -->TypeGuessRows=8 definiert.

Ich hoffe, es wird helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top