2010-07-08 21 views
5

Uso OleDB per leggere un file Excel. Una delle colonne ha un formato "comune" e contiene entrambe le stringhe con lettere e valori costituiti solo da numeri. I valori stringa vengono recuperati senza problemi, ma i valori numerici puri vengono recuperati come DBNull.DBNullo nella cella non vuota durante la lettura del file Excel tramite OleDB

Come risolvere?

Io uso la seguente stringa di connessione per aprire Excel 2003 file di (xls):

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

risposta

6

ho trovato un po 'di documentazione sul sito Web di Microsoft relativa al proprio scenario. Raccomandano di convertire tutti i numeri in stringhe.

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

Come affermato in precedenza, ADO deve indovinare il tipo di dati per ogni colonna del foglio di lavoro di Excel o un intervallo. (Questo non è influenzato dalle impostazioni di formattazione delle celle di Excel.) Un problema serio può sorgere se si hanno valori numerici combinati con valori di testo nella stessa colonna. Sia il Jet che il provider ODBC restituiscono i dati del tipo maggioritario, ma restituiscono valori NULL (vuoti) per il tipo di dati di minoranza. Se i due tipi sono ugualmente misti nella colonna, il provider sceglie il valore 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. 
+3

Ho aggiunto 'IMEX = 1' per applicare la modalità testo (ho bisogno di recuperare queste celle come testo non numerico) ma non è stato d'aiuto. È impossibile immettere nuovamente i valori in modalità testo perché ce ne sono molti. È possibile automatizzarlo in qualche modo? – flashnik

+0

Cosa succede se provi questo suggerimento di utilizzare una query anziché il nome di tabella/foglio diretto? Un leggero svantaggio è che tutte le colonne si presentano come stringhe. http://munishbansal.wordpress.com/2009/12/15/importing-data-from-excel-having-mixed-data-types-in-a-column-ssis/ – jdot

1

Ho lo stesso problema, ma con valori di stringa. I valori numerici vengono restituiti ma i valori stringa vengono restituiti come NULL. Voglio caricare valori numerici come valori stringa. La colonna può contenere cifre e codici non numerici (esempio: 100344567 e PRD001X01).

Il driver Excel considera che la colonna sia di tipo numerico poiché i valori nelle prime 8 righe sono di tipo numerico.

Anche se definisco le celle come Testo (Formato cella), non funziona.

Per forzare il driver a "vedere" la colonna come stringa, ho semplicemente inserito una citazione 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 possa essere d'aiuto.

Problemi correlati