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

Interfaçage autre langage Python Discussion :

Python et Excel


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Python et Excel
    Bonjour,

    Je voudrais exécuter avec Python, pour des séries de données, un utilitaire de calcul contenu dans un fichier .xls (pas .xslx)

    J’ai commencé à utiliser xlutils, xlrd, xlwt : si j’ai bien compris il faut copier le fichier lu dans un fichier temporaire qui sera modifié puis ensuite sauvegardé.



    1 - J’arrive à ouvrir mon fichier excel à lire des valeurs de cellules, à les modifier puis à enregistrer dans un nouveau fichier.
    Problème : le nouveau fichier ne semble pas conserver les formules des autres cellules.

    2 - Si j’essaie d’enregistrer les modifications de valeurs dans le fichier initial (dans l’idée de conserver les formules j’obtiens une erreur.

    3 – Je n’arrive pas non plus à lire les cellules (le résultat) de l‘objet python utilisé pour écrire les modifications, mais à mon avis c’est normal.

    Qu’en pensez-vous ?

    Cordialement,



    Remarque : sous Excel l’utilitaire s’exécute directement dès qu’une valeur est modifiée par appui sur la touche entrée (il n’y a pas de bouton complémentaire).

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Déjà, si tu veux faire des modifs, il faut que tu récrées entièrement le contenu pour sauvegarder le tout dans un nouveau fichier.
    Si tu ne précises pas, ce que tu veux dedans, Python ne le saura pas non plus.
    Perso, j'utilise maintenant pandas pour les fichiers xls.
    Pas d'aide par mp.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci pour ton message.

    A moins qu'il y ait un paramètre automatique dans xlutils pour le faire, ce n'est pas possible en pratique. Je ne me vois pas recopier toutes les formules.

    Quelles instructions de pandas utilises- tu ?

    Sinon j'ai essayé openpyxl.

    J'arrive à ouvrir le fichier, me déplacer dans des onglets modifier des cellules contenant des paramètres, enregistrer le fichier.
    Mais quand j'essaye de lire la cellule résultat même en mettant .value dans l'instruction, je récupère :
    - la formule contenue dans la cellule et non la valeur qui y est contenue
    - ou NONE
    selon que je réouvre la feuille avec le paramètre data_only = False ou bien True)

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Il y a des tutos très bien. En cherchant un peu, tu trouveras ton bonheur.
    Je n'utilise que les instructions classiques de pandas.
    Pas d'aide par mp.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Une réponse plus détaillée aurait été bienvenue :

    Avec les instructions classiques iloc et loc les valeurs des paramètres sont bien retournées mais pour les cellules résultant de calculs j'ai une valeur nan.

    En gros comme avec openpyxl.

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Un exemple de ce que tu souhaites faire serait le bienvenu également.
    Je ne suis pas pro de pandas, d'une part et d'autre part, je ne peux pas deviner tes besoins.
    Pas d'aide par mp.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    C'est en gros ce que j'indique dans mon premier message
    - écrire via python des données dans des cellules Excel : exemple A1 et A2
    - toujours avec python lire le résultat dans A3 qui serait par exemple A1 + A2

    (c'est bien la lecture du résultat qui pose problème)

    Bien sûr de manière itérative et pour des calculs plus développés.

  8. #8
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Oui, eh bien, tu trouveras ton bonheur, par exemple ici :
    http://www.python-simple.com/python-...-dataframe.php
    Pas d'aide par mp.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci mais les instructions portent sur la réorganisation de données figurant déjà dans des dataframes et pas sur l'extraction de résultat de calculs ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Encore une fois, je ne peux inventer tes calculs et tes données.
    Donne un exemple concret (le programme python) de ce que tu veux.
    Pas d'aide par mp.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Voilà le code avec des commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import pandas as pd
     
    xls = pd.ExcelFile('Model2.xlsx')
    df1 = pd.read_excel(xls, 'Class')
     
     
    # ici j'affiche avant et après modif le paramètre de la cellule 11
    # l'exécution donne 25 (valeur par défaut) puis 30
    print(df1.iloc[11]['Unnamed: 1'])
    df1.iloc[11]['Unnamed: 1'] = 30
    print(df1.iloc[11]['Unnamed: 1'])
     
    # cette cellule 73 contient une formule excel
    # et affiche une valeur dans excel ce qui et normal
    # l'exécution de  l'instruction Python ci-dessous affiche pourtant nan
    # C'est cette instruction qui est problématique
    print(df1.iloc[73]['Unnamed: 1'])

  12. #12
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Et tes données, c'est quoi ? Qqs lignes et colonnes pour pouvoir tester, sinon, impossible de reproduire le pb à la maison.
    Pas d'aide par mp.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Je ne peux pas diffuser le fichier Excel, j’ai donc adapté le code à un document simplifié test.xlsx. Ce fichier comporte une onglet ’Feuil2’ dans lequel on trouve les informations suivantes :
    Cellule B2 : valeur 2
    Cellule B3 : valeur 10
    Cellule B4 : formule b2*b3 (par exemple)

    Dans l’exemple donné la tentative de changement de la valeur 10 en 1000 donne un warning, et ne semble pas être effectuée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import pandas as pd
     
     
    xls= pd.ExcelFile('test.xlsx')
    df1 = pd.read_excel(xls, 'Feuil2')
    print(df1.columns)
    print(df1.iloc[1]['Unnamed: 1'])
    df1.iloc[1]['Unnamed: 1'] = 1000
    print(df1.iloc[1]['Unnamed: 1'])
    print(df1.iloc[2]['Unnamed: 1'])

  14. #14
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    On en a déjà parlé, tu ne peux pas changer la valeur d'une cellule ou d'une colonne ou autre, notamment avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1.iloc[1]['Unnamed: 1'] = 1000
    Il faut recréer la frame et l'enregistrer, soit par-dessus ton fichier, ou mieux à mon avis, dans un autre fichier.
    Pas d'aide par mp.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Je ne crois pas que le sujet ait été abordé de manière explicite.

    J'ai pu créer un nouveau fichier mais celui-ci ne conserve que les données et pas les formules.

    Pandas me semble être plus fait pour manipuler des données sous forme de valeurs que des feuilles de calcul avec des formules.


    Le seul avec lequel je pouvais avoir accès non pas aux valeurs mais au moins à une formule ce devait être openpyxl


    D'autres idées ?

  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 langlois13 Voir le message
    D'autres idées ?
    Le plus simple (mais il faut investir du temps pour le maîtriser) est de programmer EXCEL via pywin32.
    Si vous voulez faire sans, cherchez sur Internet: il y a plein de solutions à évaluer en fonction de vos besoins autres (et du temps à passer pour les évaluer et apprendre à s'en servir).

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

  17. #17
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Je n'avais pas compris que tu voulais travailler sur les formules.
    Pour ce qui est de modifier le contenu, on en a parlé au début.
    Pour le coup, je ne comprends pas l'intérêt de modifier les formules.
    Pour mon utilisation, soit je traite avec Excel ou OpenOffice, soit je traite avec Python et je recrée un fichier Excel qui ne contient que les valeurs calculées et non les formules.
    Pas d'aide par mp.

  18. #18
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    il y aussi la possibilité d'utiliser OpenOffice ou LibreOffice (on peut programmer des macros en python à l'intérieur) si le classeur Excel est compatible avec Calc ( en général OK sauf si il y a des particularités dans les formules ou du VBA).
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  19. #19
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci pour vos différentes réponses.

    En fait j'ai réussi à sauvegarder un nouveau classeur Excel, modifier un paramètre (instruction : dataframe.at...), mais la formule (cellule B4 dans l'exemple ci-dessous) n'est pas sauvegardée.
    Donc la modification des paramètres ne sert à rien.

    L'idée initiale c'était de continuer à utiliser python même de manière particulière ici.
    Des 2 méthodes proposées (Macro Python ou pywin32) laquelle vous paraît le plus simple et la plus standard (développer des compétences Python génériques) ?

  20. #20
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    Citation Envoyé par langlois13 Voir le message
    Des 2 méthodes proposées (Macro Python ou pywin32) laquelle vous paraît le plus simple et la plus standard (développer des compétences Python génériques) ?
    les Macros Python c'est seulement si tu fais du traitement en python dans une suite bureautique. Pour développer des compétences il est préférable d'utiliser un IDE avec des facilités d'édition et de débogage.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. Python et Excel
    Par Dewtime dans le forum Général Python
    Réponses: 2
    Dernier message: 14/04/2014, 14h57
  2. Python module excel
    Par PadawanInPerl dans le forum Général Python
    Réponses: 16
    Dernier message: 29/08/2012, 09h53
  3. Appel de python depuis excel
    Par Bayard dans le forum Général Python
    Réponses: 2
    Dernier message: 11/09/2010, 17h07
  4. Python et excel
    Par Jiyuu dans le forum Bibliothèques tierces
    Réponses: 9
    Dernier message: 05/11/2008, 13h35
  5. python et excel [win32com] : caractériel ? SOS
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 19/10/2005, 17h24

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