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 :

Extraire du contenu de fichiers ods


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Physicien
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Extraire du contenu de fichiers ods
    Bonjour à tous,

    Je suis débutant en programmation python.
    Je souhaiterais créer un code qui extrait du contenu de plusieurs fichiers au format .ods, et qui crée un nouveau fichier .ods pour y insérer ces données. J'utilise pour cela pyexcel (bien installé).
    Voici le code que j'avais utilisé pour cela:


    import pyexcel as pe

    # Fichier ODS source
    file_source = "Fichier1.ods"
    # Nom de la feuille à extraire
    sheet_name = "feuille1"
    # Nom de la cellule à extraire
    cell_name = "B12"

    # Extraction du contenu de la cellule
    sheet = pe.get_sheet(file_name=file_source, name_columns_by_row=0, sheet_name=sheet_name)
    value = sheet[cell_name]

    # Création d'une feuille avec le contenu extrait
    data = [[value]]
    sheet = pe.Sheet(data)

    # Création d'un nouveau fichier ODS et ajout de la feuille
    book = pe.Book()
    book.add_sheet(sheet)

    # Nom du fichier ODS de destination
    file_dest = "Fichier2.ods"

    # Enregistrement du nouveau fichier ODS
    book.save(file_dest)

    # Fermeture du fichier
    pe.free_resources()

    Bien sûr cela ne fonctionne pas.
    J'ai alors voulu faire beaucoup plus simple, simplement pour voir si j'arrivais à créer un nouveau fichier ("Fichier2" dans le code précédent), mais je n'y arrive pas non plus avec le code suivant:


    import pyexcel as pe

    # Création d'un nouveau fichier ODS
    book = pe.Book()

    # Enregistrement du nouveau fichier ODS
    file_name = "nouveau_fichier.ods"
    book.save_as(file_name=file_name)

    # Fermeture du fichier
    pe.free_resources()

    Il doit me manquer quelque chose (en plus du savoir faire ), mais je ne vois pas quoi.
    Quelqu'un aurait-il une idée svp?

    Je vous remercie par avance.
    Cordialement

    Jerome

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Citation Envoyé par JeromeTer Voir le message
    Bien sûr cela ne fonctionne pas.
    Il faudra être plus explicite que cela si tu veux être aidé.

  3. #3
    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 JeromeTer Voir le message
    [B]Il doit me manquer quelque chose (en plus du savoir faire ), mais je ne vois pas quoi.
    Ça ne marche pas se traduit par un message d'erreur, qui donne des indications sur ce qu'on a oublié, ou un résultat autre que celui attendu.
    Apprendre à décortiquer les messages d'erreur est ce qu'on apprend en essayant de faire les exercices d'un tuto... Donc côté savoir-faire, vous savez par où commencer.

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

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Physicien
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,



    Il faudra être plus explicite que cela si tu veux être aidé.
    C'est vrai en effet je n'ai pas assez détaillé. Après avoir créé un executable pour mon fichier .py, je l'execute avec NotePad++. Une fenêtre d'invite de commande apparait alors puis disparait aussitôt sans que j'ai le temps de voir ce qui est écrit. Je ne vois pas de message d'erreur à proprement parlé.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Physicien
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ça ne marche pas se traduit par un message d'erreur, qui donne des indications sur ce qu'on a oublié, ou un résultat autre que celui attendu.
    Apprendre à décortiquer les messages d'erreur est ce qu'on apprend en essayant de faire les exercices d'un tuto... Donc côté savoir-faire, vous savez par où commencer.

    - W
    Je ne peux que te donner raison sur les exercices de tuto. Il faut que je m'y mette

  6. #6
    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 JeromeTer Voir le message
    Une fenêtre d'invite de commande apparait alors puis disparait aussitôt sans que j'ai le temps de voir ce qui est écrit. Je ne vois pas de message d'erreur à proprement parlé.
    Mouais, il faut lancer le script "à la main" depuis un terminal crée par cmd.exe: ça donne le temps de voir le message d'erreur.

    Citation Envoyé par JeromeTer Voir le message
    Je ne peux que te donner raison sur les exercices de tuto. Il faut que je m'y mette
    Il faudrait vous y être mis avant de demander de l'aide telles que le précisent les règles ici.

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

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonsoir

    Citation Envoyé par JeromeTer Voir le message
    Une fenêtre d'invite de commande apparait alors puis disparait aussitôt sans que j'ai le temps de voir ce qui est écrit. Je ne vois pas de message d'erreur à proprement parlé.
    Donc rien ne prouve que le programme ne fonctionne pas. On peut en effet traduire ce comportement par "le programme apparait, fait son job et se termine".

    Citation Envoyé par JeromeTer Voir le message
    Bien sûr cela ne fonctionne pas.
    Cette certitude est significative de l'opinion que tu as de tes connaissances Python. Peut-être parce que tu sais pertinemment que tu n'as pas assez travaillé l'apprentissage de base du langage pour te lancer dans des tâches de ce type...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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 Sve@r Voir le message
    Donc rien ne prouve que le programme ne fonctionne pas. On peut en effet traduire ce comportement par "le programme apparait, fait son job et se termine".
    Ben si puisqu'on a le code... soit on trouve les erreurs en lisant le code, soit on demande à Python ce qu'il en pense et constater qu'il y a des soucis.
    Si on vient ici pour apprendre à programmer, autant apprendre à se familiariser avec les messages d'erreurs et... les mentionner lorsqu'on décrit un problème...


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

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ben si puisqu'on a le code..
    Ben je n'en ai pas parlé mais ce code qui n'est pas présenté en tant que "code" n'est pas non plus des plus agréables à lire et ne m'a pas vraiment donné envie...

    Citation Envoyé par wiztricks Voir le message
    et... apprendre à les mentionner lorsqu'on décrit un problème.
    C'était juste pour lui montrer les défauts de sa description, une autre façon de la traduire. Ce qui amène effectivement à la même conclusion: quand on a un souci on le décrit lui, ou les erreurs relevées par Python. Mais si le programme se déroule tellement vite dans un environnement non prévu pour le montrer (comme la fenêtre MsDos que tu as citée) fatalement cela lui devient impossible.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    Hello
    Citation Envoyé par JeromeTer Voir le message

    Je souhaiterais créer un code qui extrait du contenu de plusieurs fichiers au format .ods, et qui crée un nouveau fichier .ods pour y insérer ces données.
    Comme il s'agit de fichiers ods pourquoi ne pas employer LibreOffice qui permet d'utiliser du python comme langage de programmation. En plus dans les versions récentes de LibreOffice (>= 7.2) il y a une bibliothèque intégrée (ScriptForge) qui permet de simplifier la programmation.
    Voici un script python LibreOffice utilisant scriptForge qui :
    1 - Ouvre un fichier source ods.
    2 - Crée un fichier ods, ajoute une feuille dedans (MaFeuille) et copie dans ce fichier une plage de cellules d'une feuille du fichier source.
    3 - Sauvegarde le fichier créé et ferme tous les documents ouverts par la macro.


    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
    # coding: utf-8
    from __future__ import unicode_literals
    from scriptforge import CreateScriptService
     
    def MacroSF():
        svcUI = CreateScriptService("UI")
        myDocDest = svcUI.CreateDocument("Calc")
        myDocDest.InsertSheet("MaFeuille",1)
        myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
        myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
        myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
        myDocSrc1.CloseDocument(False)
        myDocDest.CloseDocument(False)
     
    g_exportedScripts = MacroSF,
    Cette macro fonctionne avec LibreOffice 7.3.4.2 sous Windows 11. J'ai mis la macro dans un module python de "mes Macros" de LibreOffice.
    Pour manipuler les macros python dans LibreOffice, une extension est indispensable : APSO. Dans les options d'APSO il faut désigner un éditeur pour éditer les scripts python (ex Notepad++ ou Geany).


    On peut aussi lancer un script python de l'extérieur si l'on exécute soffice en mode écoute socket comme ceci par exemple :
    "C:\Program Files\LibreOffice\program\soffice" --headless --accept="socket,host=localhost,port=2025;urp;"
    l'option --headless permet de lancer LibreOffice en mode invisible. si on veut voir ce qui se passe il faut enlever cette option.
    On lance son script en utilisant le python de libreOffice :
    "C:\Program Files\LibreOffice\program\python" d:\temp\MonScript.py

    avec le script MonScript.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from __future__ import unicode_literals
    from scriptforge import ScriptForge, CreateScriptService
    ScriptForge(hostname='localhost', port=2025)
    svcUI = CreateScriptService("UI")
    myDocDest = svcUI.CreateDocument("Calc")
    myDocDest.InsertSheet("MaFeuille",1)
    myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
    myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
    myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
    myDocSrc1.CloseDocument(False)
    myDocDest.CloseDocument(False)
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Physicien
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello

    Comme il s'agit de fichiers ods pourquoi ne pas employer LibreOffice qui permet d'utiliser du python comme langage de programmation. En plus dans les versions récentes de LibreOffice (>= 7.2) il y a une bibliothèque intégrée (ScriptForge) qui permet de simplifier la programmation.
    Voici un script python LibreOffice utilisant scriptForge qui :
    1 - Ouvre un fichier source ods.
    2 - Crée un fichier ods, ajoute une feuille dedans (MaFeuille) et copie dans ce fichier une plage de cellules d'une feuille du fichier source.
    3 - Sauvegarde le fichier créé et ferme tous les documents ouverts par la macro.


    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
    # coding: utf-8
    from __future__ import unicode_literals
    from scriptforge import CreateScriptService
     
    def MacroSF():
        svcUI = CreateScriptService("UI")
        myDocDest = svcUI.CreateDocument("Calc")
        myDocDest.InsertSheet("MaFeuille",1)
        myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
        myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
        myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
        myDocSrc1.CloseDocument(False)
        myDocDest.CloseDocument(False)
     
    g_exportedScripts = MacroSF,
    Cette macro fonctionne avec LibreOffice 7.3.4.2 sous Windows 11. J'ai mis la macro dans un module python de "mes Macros" de LibreOffice.
    Pour manipuler les macros python dans LibreOffice, une extension est indispensable : APSO. Dans les options d'APSO il faut désigner un éditeur pour éditer les scripts python (ex Notepad++ ou Geany).


    On peut aussi lancer un script python de l'extérieur si l'on exécute soffice en mode écoute socket comme ceci par exemple :
    l'option --headless permet de lancer LibreOffice en mode invisible. si on veut voir ce qui se passe il faut enlever cette option.
    On lance son script en utilisant le python de libreOffice :
    avec le script MonScript.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from __future__ import unicode_literals
    from scriptforge import ScriptForge, CreateScriptService
    ScriptForge(hostname='localhost', port=2025)
    svcUI = CreateScriptService("UI")
    myDocDest = svcUI.CreateDocument("Calc")
    myDocDest.InsertSheet("MaFeuille",1)
    myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
    myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
    myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
    myDocSrc1.CloseDocument(False)
    myDocDest.CloseDocument(False)
    Ami calmant, J.P
    Bonjour Jurassic,

    Merci infiniment pour ton aide. Je ne savais pas du tout qu'il était possible de faire ça avec LibreOffice. C'est une très bonne nouvelle que tu m'apprends là
    Je vais m'y pencher de plus près. J'ai du pain sur la planche mais ton aide va m'être très précieuse

    Au plaisir et merci encore
    J

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 116
    Points : 1 622
    Points
    1 622
    Par défaut
    Sinon dans les erreurs possibles du script initial:

Discussions similaires

  1. Extraire le contenu de fichier d'un dossier différent
    Par Zelda la Rouge dans le forum Général Python
    Réponses: 11
    Dernier message: 29/05/2020, 12h29
  2. Réponses: 0
    Dernier message: 07/11/2013, 00h37
  3. Réponses: 8
    Dernier message: 24/11/2008, 13h29
  4. Comment extraire le contenue d'un fichier Word
    Par didi2005 dans le forum C#
    Réponses: 1
    Dernier message: 26/09/2007, 16h49
  5. extraire le contenu d'un fichier avec perl
    Par titexe dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2006, 15h21

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