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

«gennaio»
domlunmarmergiovensab
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567