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

Python Discussion :

Liste des Feuilles d'un fichier Excel


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut Liste des Feuilles d'un fichier Excel
    Bonjour,

    Actuellement en train de coder un script ayant pour but d'extraire 2 feuilles d'un fichier excel pour les convertir en PDF, je suis confronté à un problème:

    Une de mes feuilles porte un nom avec un "é" et lorsque je tente d'avoir la liste de feuilles de mon fichier j'ai l'erreur suivante:

    UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 29: ordinal not in range(128)
    J'ai vérifié, je suis en UTF-8 et c'est le terme "complémentaire" qui pose soucis.

    J'ai beau chercher sur la toile je ne trouve pas de solution.....

    Quelqu'un peut-il au moins m'aiguiller?

    Merci,

    Cdt

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par kondor76 Voir le message
    J'ai beau chercher sur la toile je ne trouve pas de solution.....

    Quelqu' un peut il au moins m'aiguiller?
    Si vous ne postez aucun code qui permette de reproduire le problème, on ne sait même pas avec quelle bibliothèque vous accédez au fichier...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Mon en python:
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux

    Extrait de mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/python
    import xlrd
    workbook = xlrd.open_workbook(path_file)
    sheet_names = workbook.sheet_names()
    print ("sheet Names: ",sheet_names)
    et quand je l'exécute j'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sheet Names:  Traceback (most recent call last):
      File "./PrintMyCRA.py", line 29, in <module>
        print ("sheet Names: ",sheet_names)
    UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 60: ordinal not in range(128)
    Pour une feuille qui s'appelle: "Prestations complémentaire"

    Je voulais en fait faire la liste de feuilles pour justement voir comment le "é" apparaissait pour le coder dans mon script et sélectionner cette feuille la....

    merci pour votre aide...

  4. #4
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    votre est valide sur ma machine (Windows) l'accent ne pose pas de problème, mais vous êtes sur linux. Peut-être que # coding: utf-8 manque après le shebang ?

    ps: pensez à utiliser les balises codes le # dans le menu.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/usr/bin/python
    # coding: utf-8
    comme cela?

    De plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import
      File "<stdin>", line 1
        import
             ^
    SyntaxError: invalid syntax
    >>> import sys
    >>> sys.getdefaultencoding()
    'utf-8'
    >>>

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Bonjour,

    Attention: la balise indique seulement que le code source est en UTF-8 mais pas les fichiers que le code manipule.
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    J'ai résolu mon soucis en sauvant mon fichier .xlsm en encodage UTF8:

    https://help.surveygizmo.com/help/en...tf-8-or-utf-16

    Merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    J'ai résolu mon soucis en sauvant mon fichier .xlsm en encodage UTF8:

    https://help.surveygizmo.com/help/en...tf-8-or-utf-16
    Relisez le message d'erreur: "print" plante en essayant d'encoder en ASCII la chaine de caractères associée à la variable sheet_names. Ce qui est cohérent avec le shebang #!/usr/bin/python (ASCII l'encoding par défaut de Python2)... mais pas avec la syntaxe des "print".... Et suivant la méthode utilisée pour lancer ce script vous aurez (ou pas) l'erreur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    En fait non résolu car je me suis aperçu que j'avais l'accent lors d'un test antérieur.

    par contre pour la version de Python j'utilise la 3...: /usr/bin/python est un lien sur une version 3 de python

    du coup comment faire?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    du coup comment faire?
    Pour l'instant votre problème concerne "print" et donc ce qu'il y a dans sys.stdout.encoding...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.stdout.encoding
    'ANSI_X3.4-1968'
    je me trompe ou ce n'est pas bon signe?

    J'ai pu avoir un début de solution avec PYTHONIOENCODING=UTF-8 j'ai des "_" à la place du "é", mais je cherche désespérément a le faire en local au script..... peut être avec import locale

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.stdout.encoding
    'ANSI_X3.4-1968'


    je me trompe ou ce n'est pas bon signe?
    C'est cohérent avec l'erreur constatée...
    Et pour l'instant, xlrd n'est pas en cause.

    Après à vous de voir: votre encoding n'est pas celui auquel on s'attend par défaut sur un Linux avec Python3, donc vous pouvez essayez de trouver ce qui a été fait pour obtenir ce résultat là (et c'est spécifique à votre environnement).
    Dans la documentation Python vous avez tous les endroits (fichiers, variables d'environnements) où on peut faire çà.
    note: c'est peut être aussi un effet de bord du locale du terminal dans lequel vous lancez Python.

    Ou bien vous pouvez essayer de changer l'encoding de sys.stdout. Un peu de recherche sur Internet vous donnera quelques méthodes (à tester).
    note: mais il faut que cet encoding "matche" celui du terminal.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Alors effectivement, lorsque j'ajoute ceci dans mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
    J'ai bien ma liste de feuilles Excel dont celle avec accent mais comme ceci:

    sheet Names: [..., 'compl_mentaires',.....] et pas comme cela: [..., 'complémentaires',.....].

    du coup, lorsque je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sheet_Hsupp = workbook.sheet_by_name('compl_mentaires')
     
    Traceback (most recent call last):
      File "$PATH/python/lib/python3.6/site-packages/xlrd/book.py", line 470, in sheet_by_name
        sheetx = self._sheet_names.index(sheet_name)
    ValueError: 'compl_mentaires' is not in list
    dur dur l'encodage.....

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    du coup, lorsque je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sheet_Hsupp = workbook.sheet_by_name('compl_mentaires')
     
    Traceback (most recent call last):
      File "$PATH/python/lib/python3.6/site-packages/xlrd/book.py", line 470, in sheet_by_name
        sheetx = self._sheet_names.index(sheet_name)
    ValueError: 'compl_mentaires' is not in list
    'compl_mentaires' est ce qu'affiche "print".
    Et si l'affichage remplace les 'é' par '_', le nom de la feuille reste avec un 'é'... D'où le ValueError.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Alors j'avais effectivement un soucis avec ma VM que j'ai fini par reboot.

    du coup le sheet_names me renvoie ceci: complémentaires... reste à trouver le bon encodage pour sélectionner cette feuile.... et la je patauge....

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    du coup le sheet_names me renvoie ceci: complémentaires... reste à trouver le bon encodage pour sélectionner cette feuile.... et la je patauge....
    Partez d'un fichier EXCEL dans lequel vous vous êtes appliqué à n'utiliser que des caractères ASCII pour nommer vos feuilles.
    Imaginons qu'il y ait une feuille nommée "toto" que feriez vous pour la sélectionner?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Points : 73
    Points
    73
    Par défaut
    Mon problème d'accent résolu, existe -il un module Python capable d'extraire un feuille excel et de la convertir un un fichier PDF portant le nom de la feuille.

    Cela fait un moment que je cherche à faire cela....en vain...

    Merci,

Discussions similaires

  1. création d'un fichier en copiant des feuilles d'un fichier excel
    Par valérieF dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/05/2015, 23h30
  2. [XL-2003] importer des feuilles d'autres fichiers excel
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/11/2012, 13h54
  3. avoir la liste des feuilles d'un classeur Excel
    Par alili mostafa dans le forum Débuter
    Réponses: 2
    Dernier message: 08/02/2010, 15h48
  4. [VBA-E] liste des feuilles
    Par repié dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/02/2006, 17h27
  5. Obtenir la liste des feuilles d'un fichier Excel
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 15/10/2004, 10h53

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