2010-09-16 20 views
1

J'essaie d'importer des données d'une feuille de calcul Excel dans mon application C# en utilisant OleDB. J'utilise la chaîne de connexion standard avec les options de IMEX=1,HDR=YESValeurs changeantes lors de l'importation à partir d'Excel avec C#/OLEDB

Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Propriétés étendues = "Excel 12.0; HDR = OUI; IMEX = 1"

J'ai une colonne où les valeurs sont principalement le texte: TRUE ou FALSE. En bas, il y a quelques valeurs de BLANK. Lorsque l'importation se produit, les valeurs BLANK sont remplacées par des chaînes vides. Cela est probablement dû au fait que OleDB a déterminé que le type de données de la colonne est booléen et qu'il n'importait aucune valeur non booléenne, comme BLANK.

J'ai essayé la solution dans this answer mais cela n'a pas fonctionné. Même lorsque je pré-créer le DataTable et définir ses colonnes à tous avoir un type de chaîne de caractères, les valeurs BLANK continuent à être supprimées.

J'ai essayé de pirater la clé de registre suggérée dans la même question mais sans aucun effet.

Y a-t-il un recours? Ou vais-je devoir essayer d'utiliser COM? Nous n'avons pas le budget pour SpreadsheetGear et je ne peux pas utiliser excellibrary car je dois traiter des fichiers .xlsx principalement.

Merci à l'avance

+0

Une chance à ce sujet? J'ai un problème similaire. –

Répondre

0

Essayez d'enregistrer votre fichier Excel au format CSV et le traiter.

0

Je sais que j'ai trois ans de retard, mais cela pourrait aider quelqu'un. Tout le crédit va à Andrew Garrison qui a posté sa réponse here. Vous devez modifier un paramètre de Registre:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\ 

changement TypeGuessRows à 0 et ImportMixedTypes à Text sous cette clé.

ACE analyse les 8 premières lignes et essaie de deviner les formats de colonne. Tout le reste qui ne correspond pas au format retourne ensuite comme NULL. La définition de TypeGuessRow sur 0 force le pilote à analyser toutes les lignes pour déterminer le format (bien sûr, il y a un problème de performance). ImportMixedTypes = text spécifie que les colonnes au format mixte, comme dans votre cas, doivent être importées en tant que texte.