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\""
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top