Dbnull in cella non vuota durante la lettura del file di Excel tramite OLEDB
Domanda
Io uso OLEDB per leggere un file Excel.Una delle colonne ha un formato "comune" e contiene entrambe le corde con lettere e valori composti solo da numeri.I valori stringa vengono recuperati senza problemi, ma i valori numerici puri vengono recuperati come DBNull
.
Come risolvere?
Io uso la seguente stringa di connessione per aprire Excel 2003 File (XLS):
"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\\file.xls;
Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
. Soluzione
Ho trovato una documentazione sul sito Web di Microsoft che si applica al tuo scenario.Raccomandano di convertire tutti i numeri in stringhe.
http://supporter.microsoft.com/kb/257819
Come indicato in precedenza, ADO deve indovinare il tipo di dati per ogni colonna nel foglio di lavoro di Excel o nel campo.(Questo non è influenzato dalle impostazioni di formattazione delle celle Excel.) È possibile sorgere un problema serio se si dispone di valori numerici misti con valori di testo nella stessa colonna.Sia il getto che il provider ODBC restituiscono i dati del tipo di maggioranza, ma restituiscono i valori nulli (vuoti) per il tipo di dati di minoranza.Se i due tipi sono ugualmente miscelati nella colonna, il provider sceglie numerico sul testo.
Ad esempio:
* 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.
. Altri suggerimenti
Ho lo stesso problema ma con valori di stringa.I valori numerici vengono restituiti ma i valori di stringa vengono restituiti come nullo.Voglio caricare valori numerici come valori di stringa.La colonna può contenere cifre e codici non numerici (esempio: 100344567 e PRD001x01).
Il driver Excel ritiene che la colonna è di tipo numerico poiché i valori nelle prime 8 righe sono di tipo numerico.
Anche se definisco le celle come testo (cella del formato) non funziona.
Per forzare il conducente a "vedere" la colonna come stringa ho semplicemente messo un preventivo davanti al valore numerico ('100344567).Questo trasforma il valore numerico in una stringa.
Questo valore di 8 righe è definito nel registro HKEY_LOCAL_MACHINE \ Software \ Microsoft \ JET \ 4.0 \ Engines \ Excel \ -> TypeGuessRows= 8.
Spero che ti aiuti.