Accesso ad Excel con ADO e tipi di dati misti

Quando ci connettiamo ad Excel tramite ADO i tipi delle colonne non sono definiti in uno schema, quindi il driver deve analizzare qualche riga per poter capire il tipo di dati contenuto.

Se i dati non sono coerenti, di default viene scelto il tipo di dati preponderante e restituito NULL per gli altri. Se i due tipi di dati sono presenti in uguale misura il tipo di dati sarà numerico.

Il numero di righe da analizzare di default è 8 ma può essere modificato tramite il parametro di configurazione MaxScanRows (da 1 a 16 o 0 per analizzarle tutte), peccato che a causa di un bug nel driver ODBC non funzioni.
L'alternativa è modificare la chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows

Il parametro nella stringa di connessione IMEX che sta per Import Mixed Types se impostato a 1 impone che i dati misti vengano importati come testo.

Però se le N righe in analisi (TypeGuessRows) sono tutte numeriche, il tipo di dati non verrà convertito in testo e rimarrà numerico.
L'unico modo per risolvere questa ultima problematica è impostare nel registro di sistema TypeGuessRows=0 in modo da analizzare tutte le righe.

 

Riferimenti:

How to Utilizzare ADO con dati di Excel da Visual Basic o VBA
PRB: i valori di Excel restituiti come NULL tramite DAO OpenRecordset
Dati troncati a 255 caratteri con driver ODBC di Excel

posted @ giovedì 29 gennaio 2009 13:52

Print

Comments on this entry:

# re: Accesso ad Excel con ADO e tipi di dati misti

Left by AZ at 29/01/2009 14:53
Gravatar
Ottimo trucco, non lo conoscevo. Me lo segno :)

Comunque, per mia esperienza diretta, è meglio utilizzare una dll come l'excelreader che trovi su codeproject (anche se ha un paio di bug risolvibili) perché prima o poi ci si scontra con i limiti di ADO nella lettura di un Excel.

Ciao
Comments have been closed on this topic.
«dicembre»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234