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 :

Récupérer la valeur d'une cellule Excel


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Récupérer la valeur d'une cellule Excel
    Bonjour à tous,

    Je souhaite récupérer la valeur d'une cellule d'un fichier Excel à partir de son nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import openpyxl
    wb=openpyxl.load_workbook('Test.xlsm')
    my_range = wb.defined_names['NOM_CELLULE']
     
    print (my_range.attr_text)
    la variable "my_range.attr_text" me renvoie l'adresse de la cellule mais je souhaiterai récupérer la valeur de la cellule.

    Si quelqu'un a une idée..

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par sub73 Voir le message
    la variable "my_range.attr_text" me renvoie l'adresse de la cellule mais je souhaiterai récupérer la valeur de la cellule.
    Pourquoi ne pas vous inspirer des exemples dans la documentation ?

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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Le code suivant me donne bien la valeur de la cellule nommée "SECOND" ; ça marche mais j'imagine qu'il doit y avoir plus simple ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import openpyxl
    wb=openpyxl.load_workbook('Test.xlsm')
     
    my_range = wb.defined_names['SECOND']
    dests = my_range.destinations
     
    cells = []
    for title, coord in dests:
        ws = wb[title]
        cells.append(ws[coord])
     
    print(wb['Feuil1'][coord].value)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par sub73 Voir le message
    mais j'imagine qu'il doit y avoir plus simple ...
    Si ce n'est pas documenté, on ne va pas l'inventer.

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

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    hello,
    Citation Envoyé par sub73 Voir le message
    Le code suivant me donne bien la valeur de la cellule nommée "SECOND" ; ça marche mais j'imagine qu'il doit y avoir plus simple ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import openpyxl
    wb=openpyxl.load_workbook('Test.xlsm')
     
    my_range = wb.defined_names['SECOND']
    dests = my_range.destinations
     
    cells = []
    for title, coord in dests:
        ws = wb[title]
        cells.append(ws[coord])
     
    print(wb['Feuil1'][coord].value)
    tu peux essayer quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import openpyxl
    wb = openpyxl.load_workbook('d:/logiciels/excel/classeur1.xlsm')
    ws = wb['Feuil1']
    my_range = wb.defined_names['MaCellule']
    valeur = ws[ list(my_range.destinations)[0][1]].value 
    print(valeur)
    Ami calmant, J.P

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Merci beaucoup jurassic pork ; c'est pile ce qu'il me fallait ; du coup, ça tient en 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wb=openpyxl.load_workbook('Test.xlsm')
    valeur = wb['Feuil1'][list(wb.defined_names['SECOND'].destinations)[0][1]].value

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si ce n'est pas documenté, on ne va pas l'inventer.

    - W

    jurassic park a réussi à inventer quelque chose....

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    tu peux essayer quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import openpyxl
    wb = openpyxl.load_workbook('d:/logiciels/excel/classeur1.xlsm')
    ws = wb['Feuil1']
    my_range = wb.defined_names['MaCellule']
    valeur = ws[ list(my_range.destinations)[0][1]].value 
    print(valeur)
    Un "defined_name" est associé à un "worksheet" et à un "range" => si on ne connaît pas le worksheet, impossible d'ignorer celui retourné par .destinations. De plus, un range de cellules, ça retourne un tuple qui n'a pas d'attribut value (sauf si c'est une seule cellule).

    Par contre on peut fabriquer une fonction pour se "simplifier" l'écriture du double accès: un pour le worksheet, l'autre pour le range et qui va éventuellement retourner la valeurs des cellules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def get_values(ws, name):
          n = wb.defined_names.get(name)
          a, b = list(n.destinations)[-1]
          cells = wb[a][b]
          if isinstance(cells, tuple):
                ....
          else:
               return cells.value
    Dit autrement, si l'API proposée vous empêche de penser, en ré-écrire un bout qui libère son esprit et évite d'écrire plein de lignes à chaque fois... c'est juste "programmer".
    note: mon exemple ne tient pas compte de tous les cas de figures.

    Citation Envoyé par sub73 Voir le message
    jurassic park a réussi à inventer quelque chose....
    Il n'a rien inventé, il a juste adapté à un cas particulier où on connaît la worksheet et ou le range se limite à une cellule.
    Mais vous êtes supposé savoir un peu programmer pour utiliser openpyxl... et il n'y a que vous qui sachiez comment adapter l'interface aux cas de defined names que vous avez.

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

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wb=openpyxl.load_workbook('Test.xlsm')
    valeur = wb['Feuil1'][list(wb.defined_names['SECOND'].destinations)[0][1]].value
    valeur me renvoie bien la valeur de la cellule..
    En revanche, lorsque la cellule contient une formule, cela me renvoie la formule et pas la valeur.
    Si quelqu'un aune idée....

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par sub73 Voir le message
    En revanche, lorsque la cellule contient une formule, cela me renvoie la formule et pas la valeur.
    Si quelqu'un aune idée....
    Pour ça, il faut sauvegarder le fichier et le lire avec EXCEL ou un équivalent qui a le moteur de calcul des formules (comme le vrai EXCEL via pycom32). Après si vous aviez pris le temps de chercher un peu sur Internet vous auriez trouvé des références à des bibliothèques comme pycel...

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

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Après si vous aviez pris le temps de chercher un peu sur Internet vous auriez trouvé des références à des bibliothèques comme pycel...

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    Citation Envoyé par sub73 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    wb=openpyxl.load_workbook('Test.xlsm')
    valeur = wb['Feuil1']
    [list(wb.defined_names['SECOND'].destinations)[0][1]].value
    valeur me renvoie bien la valeur de la cellule..
    En revanche, lorsque la cellule contient une formule, cela me renvoie la formule et pas la valeur.
    Si quelqu'un aune idée....
    il faut utiliser l'argument data_only à True dans le chargement du classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb=openpyxl.load_workbook('Test.xlsm',data_only=True)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Merci beaucoup Jurassic.

    Clair et efficace !!!

Discussions similaires

  1. [XL-2016] Excel Récupérer la valeur d'une cellule pour l'utiliser dans une formule
    Par Epaminomdas51 dans le forum Excel
    Réponses: 2
    Dernier message: 08/06/2021, 18h23
  2. Réponses: 2
    Dernier message: 07/01/2019, 21h33
  3. [PowerShell] Récupérer la valeur d'une cellule Excel et la stocker dans une variable
    Par TheDjazairi.exe dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 07/05/2018, 13h50
  4. [Débutant] Récupérer valeur d'une cellule Excel
    Par Skice dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/07/2011, 09h44
  5. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 14h50

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