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 :

openpyxl: création de fichiers xlsx à partir d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 5
    Par défaut openpyxl: création de fichiers xlsx à partir d'une liste
    Bonjour Forum,

    Je me permets de poser une question de béotien dont la réponse est certainement évidente pour les spécialistes mais pour laquelle je ne trouve pas de solution :

    A partir d'une liste, par exemple la liste de noms suivante,
    agents = ["pierre", "paul", "jacques"]

    En itérant sur cette liste, est-il possible de créer avec openpyxl autant de fichier xlsx qu'il y a d'agents, chaque fichier ayant le nom d'un agent :
    pierre.xlsx
    paul.xlsx
    jacques.xlsx

    Dans la vraie vie, la liste d'agents comprends une cinquantaine de noms.

    Mes différents essais avec une boucle type
    For i in liste
    n'aboutissent qu'à créer un seul fichier i.xlsx, quelque soit la syntaxe que j'utilise

    Merci d'avance à celles ou ceux qui prendront un peu de temps pour me répondre.

    Très cordialement,

    Lolo

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Partir d'une liste de chaines de caractères pour fabriquer d'autres chaines de caractères (qui seront des noms de fichiers) est ce qu'on sait à priori faire après avoir pris le temps d'ouvrir un tuto pour apprendre les bases du langage.
    Sans cela, effectivement, c'est compliqué et on peut tourner en rond... mais si vous devez sérieusement programmer avec Python, vous n'avez pas trop le choix.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 5
    Par défaut openpyxl: création de fichiers xlsx à partir d'une liste
    Merci beaucoup Wiztricks,
    La bonne nouvelle est que c'est possible: je vais donc continuer mes essais. Cela fonctionne sans difficulté pour un nom donné mais comme vous le dites, je tourne en rond lorsque je déclare le nom en variable: la variable est interprétée comme une constante et un seul fichier peut être créé avec constante.xlsx comme nom.
    Très bonne journée

    Lolo

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Lolo925 Voir le message
    La bonne nouvelle est que c'est possible: je vais donc continuer mes essais. Cela fonctionne sans difficulté pour un nom donné mais comme vous le dites, je tourne en rond lorsque je déclare le nom en variable
    Que ce soit "possible" ne va pas vous avancer à que faire que çà fonctionne.... Et si vous avez des soucis dans la compréhension de ce que sont des variables, ouvrez un tuto. apprenez ou réviser ce qu'on peut faire avec plutôt que d'essayer des constructions sans trop les comprendre.

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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Lolo925 Voir le message
    agents = ["pierre", "paul", "jacques"]

    Mes différents essais avec une boucle type
    For i in liste
    n'aboutissent qu'à créer un seul fichier i.xlsx, quelque soit la syntaxe que j'utilise
    Déjà c'est for i in agents, et "i" étant plutôt conventionnellement utilisé pour des indices numériques je préfère (tout à fait personnellement) écrire for x in agents.
    Ensuite ça aurait été bien de nous donner tes syntaxes qu'on voie où tu t'étais gauffré. Parce qu'en l'état, il faut juste dire à Python "crée une chaine contenant la valeur de x à laquelle on rajoute une seconde chaine xlsx (donc simple concaténation de deux chaines, ce qui est expliqué dans tous les tutos aux chapitres qui parlent des chaines Python) puis traite cette chaine créée comme n'importe quelle autre chaine, et en particulier comme un nom de fichier".

    Donc déjà si tu arrives simplement à afficher "pierre.xlsx" et autres, tu auras déjà gagné.

    Citation Envoyé par Lolo925 Voir le message
    La bonne nouvelle est que c'est possible
    Ben oui, comme dans tous les langages qui savent manipuler des strings ...
    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]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 5
    Par défaut
    Merci beaucoup SVe@r,

    Mon problème ne vient pas vraiment de la création des chaines, mais de la création des fichiers Excel ensuite:

    La première partie fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    agents = ["pierre", "paul", "jacques"]
    for x in agents:
        chaine = ((x)+".xlsx")
        print(chaine)
    Mais ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     wb = Workbook()
        filepath_wb = '/Users/lolo/Desktop/chaine'
        wb.save(filepath_wb)
    ne créé qu'un seul fichier nommé chaine.xlsx alors que j'attends pierre.xlsx, paul.xlsx...
    C'est cette partie que je ne comprends pas


    Lolo

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    Merci de mettre le code python dans la balise code: #(à droite dans la barre d'outil) sinon sans formatage, ce n'est pas du python valide (et très difficile à lire)
    ps: tu peux ré-éditer ton message


    ---------
    Puisque pas de "formatage", impossible à répondre
    Mais je suppose
    - simplement une mauvaise indentation
    - ou, tu n'as rien compris aux boucles...

    Mais même sans boucle, le résultat est bien valide car tu ne sembles pas savoir utiliser une variable (doit-être chapitre 1 ou 2 de tous les tutos )
    Pourtant, plus haut, tu fais : chaine = ((x)+".xlsx"). OK avec "x" mais avec "chaine"

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Lolo925 Voir le message
    Merci beaucoup SVe@r,
    C'est pour ça que tu m'as mis -1 ???

    Citation Envoyé par Lolo925 Voir le message
    Mon problème ne vient pas vraiment de la création des chaines, mais de la création des fichiers Excel ensuite:
    Non, simplement de la création des chaines. Ou (si je lis ton code) de la façon dont tu utilises ensuite ta chaine créée.

    Citation Envoyé par Lolo925 Voir le message
    La première partie fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    agents = ["pierre", "paul", "jacques"]
    for x in agents:
        chaine = ((x)+".xlsx")
        print(chaine)
    Ouaip. Déjà sur le rôle des parenthèses: leur rôle est de prioriser des opérations, comme on t'a appris au primaire quand on t'apprenait à calculer, pas prioriser des variables. Donc mettre x entre parenthèse est totalement inutile (et je reste poli car j'ai un autre adjectif à l'esprit). De plus, prioriser des opérations sous-entend qu'on a au minimum deux opérations afin de prioriser l'une sur l'autre. Donc prioriser l'addition sur que dalle est là aussi totalement ...
    Donc tu peux remplacer chaine = ((x)+".xlsx") par chaine = x + ".xlsx". Les parenthèses aussi sont un outil donc elles aussi ne sont utilisées que si nécessaire et trop en mettre est aussi néfaste que ne pas en mettre du tout.

    Citation Envoyé par Lolo925 Voir le message
    Mais ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wb = Workbook()
    filepath_wb = '/Users/lolo/Desktop/chaine'
    wb.save(filepath_wb)
    ne créé qu'un seul fichier nommé chaine.xlsx alors que j'attends pierre.xlsx, paul.xlsx...
    C'est cette partie que je ne comprends pas
    Normal, tu n'utilises pas la variable chaine mais la string "c", "h", "a", "i", "n", "e". Quand tu mets des guillemets, Python considère que le truc qui s'y trouve c'est du caractère, pas une variable. Tu n'as pas mis de guillemets quand tu as utilisé x précédemment, et ça a fonctionné. Tu en mets, ça ne fonctionne plus. Donc (conclusion plutôt évidente) faut pas en mettre. Programmer c'est aussi, parfois, refléchir par analogies.
    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]

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Lolo925 Voir le message
    ne créé qu'un seul fichier nommé chaine.xlsx alors que j'attends pierre.xlsx, paul.xlsx...
    Dans '/Users/lolo/Desktop/chaine', le chaine qui est dans la chaine de caractère n'est pas la variable chaine de la boucle...

    Dans les tutos, vous avez des exercices (corrigés) qui vous sont proposés pour pratiquer et vérifiez que vous avez compris un peu quelque chose. Sans ça non seulement vous allez tourner en rond mais resté coincé dans les trucs qui marche plutôt que de réfléchir à comment construire une solution.

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 5
    Par défaut
    Merci beaucoup Sve@r pour la rapidité et l'efficacité de cette réponse:

    Cela fonctionne parfaitement avec

    filepath_wb = '/Users/lolo/Desktop/'+chaineDésolé pour l'oubli du like sur un message précédent...

    Très bonne journée

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Lolo925 Voir le message
    Cela fonctionne parfaitement avec

    filepath_wb = '/Users/lolo/Desktop/'+chaine
    N'était-ce pas évident ???
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wb = Workbook()
    agents = ("pierre", "paul", "jacques")		# Pas besoin de liste quand un tuple suffit
    for x in agents: wb.save("/users/lolo/Desktop/%s.xlsx" % x)
    Et en utilisant os.path tu peux même récupérer de façon automatique le chemin "/users/lolo" et créer des chemins compatibles Unix/Windows.

    Citation Envoyé par Lolo925 Voir le message
    Désolé pour l'oubli du like sur un message précédent...
    C'est pas pour le like inexistant que j'ai râlé, c'est pour le unlike réel.
    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]

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

Discussions similaires

  1. SAS 9.3 & Excel 2013 - Créer un fichier XLSX à partir d'une proc tabulate
    Par Adrien M. dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/10/2014, 16h15
  2. Réponses: 6
    Dernier message: 08/09/2009, 14h35
  3. [WD14] Ajout dans un fichier a partir d'une liste
    Par mero007 dans le forum WinDev
    Réponses: 1
    Dernier message: 20/07/2009, 15h13
  4. Création d'un arbre à partir d'une liste contigue
    Par karaz_karaz dans le forum C
    Réponses: 2
    Dernier message: 28/06/2008, 23h51
  5. [.NET]réécriture d'un fichier a partir d'une list box
    Par scorpking dans le forum VC++ .NET
    Réponses: 14
    Dernier message: 24/04/2006, 14h16

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