[SSIS] Jet Provider 4.0 et Excel, le typage de colonnes…

J’ai encore rencontré quelques soucis avec mon grand ami le Jet Provider pour Excel, pourvoyeur généreux de temps perdu en mission…

Celui-ci a une facheuse tendance à strong-typer les colonnes d’un fichier Excel en se basant sur une analyse statistique des types des n premières lignes. Très très embêtant si vous stockez des nombres et du texte (un ID composé de caractères) dans un champ texte…

En gros cela marche comme celà:
– Excel examine les clefs dans HKEY_LOCAL_MACHINE / SOFTWARE/Microsoft/Jet/4.0/Engines/Excel
– Il scanne les n premières lignes du fichier (n étant égal à la clé TypeGuessRows)
– Il type la ligne dans le type majoritaire et remplace par NULL les valeurs non castables dans ce type (si vos « TypeGuessRows » (défaut 8) premières lignes sont majoritairement des entiers, et que les autres contiennent du texte, too bad!)

Si vous trainez sur Google, on vous dira de mettre IMEX=1 dans les ExtendedProperties de la ConnectionString, et de vérifier que la clé ImportMixedTypes est à « Text » , et c’est ce qu’il faut faire.
IMEX=1 dit en gros à Jet « si des types divers sont détectés, force le typage dans le type stocké dans ImportMixedTypes » en l’occurence Text qui est en général ce qu’on veut obtenir dans ce genre de cas.

Et ça va marcher… jusqu’au jour où vous récupèrerez le même problème!

Pourquoi?

Le problème c’est que si TOUTES les valeurs sont numériques dans les « TypeGuessRows » premières lignes, alors IMEX=1 est ignoré – ce qui est normal vu que le type n’est pas « mixte », cf la définition de IMEX ci-dessus – et c’est le type majoritaire – en l’occurence numérique – qui est utilisé comme valeur de typage et non celle de ImportMixedTypes.

La solution: forcer le scan de toute la table et non des TypeGuessRows premières lignes.

Pour cela allez dans la base de registre et dans la clé HKEY_LOCAL_MACHINE / SOFTWARE/Microsoft/Jet/4.0/Engines/Excel mettez la valeur de TypeGuessRows à 0, cela implique un scan de toute la table pour inférer le type de colonne.

A bientôt!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s