IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Cellule vide lors de la lecture d'un fichier Excel par OLEDB


Sujet :

Framework .NET

  1. #1
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut Cellule vide lors de la lecture d'un fichier Excel par OLEDB
    Bonjour,

    Vous connaissez certainement le problème de la lecture d'un fichier Excel par OLEDB qui retourne des cellule vide à cause du mécanisme de recherche de type de donnée propre à excel
    Sinon : + oledb excel empty cells

    Je pense avoir trouvé une solution. Ma chaine de connection était à l'origine celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strConn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;ImportMixedTypes=Text"";", FichierImport);
    et malgré toutes mes tentatives, je n'arrivais jamais à récupérer le jeu de données complet, il y avait toujours des cellules vides.

    J'ai tenté ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strConn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;ImportMixedTypes=Text"";", FichierImport);
    et la bingo. Ca a marché.

    Le hic c'est que avec HDR=NO, le dataset que j'obtiens a des nom de colonnes genre F1, F2... et la 1èere ligne de mon dataset contient donc les "vrais" nom de colonnes.

    Je fais donc une 1ere requete qui me retourne la 1èere ligne donc avec les nom de champs.
    Je fait une une moulinette qui génère une nouvelle clause SELECT avec des
    alias pour chaque champs
    j'execute une 2nd requete avec la clause généré avant et je rempli mon dataset avec ca

    Que pensez vous de cette solution ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    La propriété HDR indique si la feuille excel contient une ligne d'entête avec les noms de colonne (HDR = HeaDeR).
    C'est pour cela que lorsque tu mets HDR=NO, le provider considère la première ligne comme une ligne de données et que tu as F1, F2,... comme nom de colonnes dans ton DataSet.

    Pour déterminer le type de donnée dans une colonne, Excel scrute les données des huit premières lignes (en ignorant la première, lorsqu'elle considérée comme une entête). Si les données de cette colonne sont différentes au-delà de la 8ème ligne, Excel ne saura pas reconnaitre la valeur et renverra "null".

    Du coup, le fait que tu indiques HDR=NO, ajoute la première ligne en tant que données et Excel a du considérer toutes les colonnes comme du texte.

    Pour éviter ce problème, il est possible de modifier la clé de registre suivante en mettant 0 au lieu de 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel : TypeGuessRows
    NB : Cela peut nuire aux performances car Excel devra parcourir toute les données de la colonne pour déterminer son type.

    Ta solution a le mérite de ne pas avoir à modifier cette clé de registre (à partir du moment où la première ligne contient du texte => Excel considère que la colonne contient des données de type texte).

  3. #3
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par Skalp Voir le message
    La propriété HDR indique si la feuille excel contient une ligne d'entête avec les noms de colonne (HDR = HeaDeR).
    C'est pour cela que lorsque tu mets HDR=NO, le provider considère la première ligne comme une ligne de données et que tu as F1, F2,... comme nom de colonnes dans ton DataSet.
    Oui oui, ca je savais

    Citation Envoyé par Skalp Voir le message
    Pour déterminer le type de donnée dans une colonne, Excel scrute les données des huit premières lignes (en ignorant la première, lorsqu'elle considérée comme une entête). Si les données de cette colonne sont différentes au-delà de la 8ème ligne, Excel ne saura pas reconnaitre la valeur et renverra "null".
    ca aussi

    Citation Envoyé par Skalp Voir le message
    Du coup, le fait que tu indiques HDR=NO, ajoute la première ligne en tant que données et Excel a du considérer toutes les colonnes comme du texte.
    c'est le but de la manip

    Citation Envoyé par Skalp Voir le message
    Pour éviter ce problème, il est possible de modifier la clé de registre suivante en mettant 0 au lieu de 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel : TypeGuessRows
    NB : Cela peut nuire aux performances car Excel devra parcourir toute les données de la colonne pour déterminer son type.
    je sais aussi
    Citation Envoyé par Skalp Voir le message
    Ta solution a le mérite de ne pas avoir à modifier cette clé de registre (à partir du moment où la première ligne contient du texte => Excel considère que la colonne contient des données de type texte).
    C'est tout l'intérêt la manip car chez mon client impossible de toucher au serveur

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par seb.49 Voir le message
    Oui oui, ca je savais
    ca aussi
    c'est le but de la manip
    je sais aussi
    Ok, en fait tu savais tout, c'est cool... Mais ce n'est pas ce que laissait penser ton premier message (j'aurais bien aimé le comprendre plus tôt, ça m'aurait épargné le temps que j'ai mis à rédiger ma réponse ).
    Citation Envoyé par seb.49 Voir le message
    C'est tout l'intérêt la manip car chez mon client impossible de toucher au serveur
    Ok, donc on pense tous les deux la même chose de ta solution... Mais alors qu'attends-tu comme réponse ?

  5. #5
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut
    J'attendais pas vraiment de réponse, juste au cas ou, s'il quelqu'un a déjà essayé et rencontré des problèmes ca m'intéresse.

    Sinon ce message est aussi une solution que je propose pour ceux qui rencontre ce problème et ils sont nombreux quand je regarde dans google.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur lors de la lecture d'un fichier Excel par un executable
    Par maracujadobrasil dans le forum MATLAB
    Réponses: 19
    Dernier message: 12/12/2013, 11h59
  2. [XL-2007] Cellules vides lors d'un collage avec liaison
    Par alers dans le forum Excel
    Réponses: 4
    Dernier message: 22/03/2013, 12h12
  3. Réponses: 1
    Dernier message: 25/01/2011, 14h52
  4. [AJAX] Lecture d'un fichier json par ajax
    Par zizoo510 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/08/2008, 12h11
  5. Performance lors de la lecture d'un fichier excel
    Par Acarp47 dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/08/2007, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo