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 :

Python et la manipulation de données dans un fichier *.xlsx [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    Par défaut Python et la manipulation de données dans un fichier *.xlsx
    Bonjour @ tous.

    Je débute sur Python, et je trouve ce langage plein de ressources intéressantes, c'est pour cette raison que je souhaite approfondir un peu le sujet.

    Pour débuter, j'utilise la version 3.5 de Python et le module openpyxl qui est visiblement l'un des plus performants à l'heure actuelle pour la manipulation de fichier *.xlsx.

    Ce que je souhaite faire c'est :

    1/ Ouvrir un fichier Excel existant
    2/ Créer un onglet vierge
    3/ Parcourir le tableau en lisant la colonne B et vérifier est remplit
    -- Boucle
    3.1/ Si elle est remplit, je récupère les valeurs contenues dans les cellules de A à F
    3.2/ Et je les colle dans le nouvel onglet
    -- Fin boucle
    4/ Je supprime mon onglet source pour ne garder que celui qui a les valeurs copiées

    Pour le moment, les étapes de 1 à 3 sont réalisées, mais je bloque sur les suivantes, notamment sur les 3.1,3.2.

    Voici le code existant :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import os
    import openpyxl
    from openpyxl import *
     
    wb = Workbook()
    wb= openpyxl.load_workbook('testfile.xlsx')
     
    # On active l'onglet courant
    ws = wb.active
     
    # On crée un nouvel onglet
    ws1 = wb.create_sheet()
    ws1.title = ws.title
     
    # On s'apprête à parcourir la colonne B
    translated = []
    begrow = 1
    endrow = ws.max_row
    for row in ws.iter_rows('B' + format(begrow) + ':B' + format(endrow)):
        for cell in row:
            if cell.value is not None:
                print(cell.value)      
     
    wb.save('testfile_new.xlsx')
    ws.close()
    xl.Quit()
    Dans l'idéal j'aurais aimé supprimer les lignes dont la colonne B est vide, mais j'ai cru lire que ce n'était pas possible, d'ou cette solution 'alambiquée'.

    Auriez-vous une idée qui me permettrait d'aller au bout de ma réflexion ?

    En vous remerciant par avance.

    Geo-x

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Bonjour,

    Je suis débutant mais travaille aussi avec python pour du Excel. J'utilise personnelement xlwt pour ecrire et xlrd pour lire excel. Je ne connaissais pas Openpyxl. Mais le principe reste globalement le même j'ai l'impression.
    Je traiterrai ça sous forme de liste, append chaque éléments de la colonne B dans une liste comme "colonne_B"
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for text,i in enumerate(colonne_B):
         if text!='':
    #faire une boucle pour recupérer les éléments de la ligne indice 'i'
     
    #à la fin apres avoir répurer la ligne l'écrire sur l'autre feuille
    Je sais pas si j'ai été très clair, mais je ne connais pas trop les commandes pour ce module si...
    Si tu as d'autres questions

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Re,

    Essayes ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    column_B=[]
    for index, row in enumerate(ws1.iter_rows('B')):
        for cell in row:
            column_B.append(ws1.cell(row=index + 1, column=1).value)
    Valentin.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    Par défaut
    Bonjour Stabilo, merci de tes réponses.

    J'ai déjà essayé la méthode avec le append, mais le problème c'est que ça intègre la valeur d'une colonne dans un ARRAY à la suite.

    Par exemple dans ce cas, je n'aurais que : [col1.ligne1,col1.ligne2,col1.ligne3,col1.ligne4] alors qu'il me faudrait : [col1.ligne1,col2.ligne1,col3.ligne1,col4.ligne1,col5.ligne1] que je copierais ensuite dans un nouvel onglet, avant de passer à la ligne suivante et ça, je ne sais pas faire...

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Pour écrire avec ton module j'ai trouver ça sur le net :

    http://openpyxl.readthedocs.io/en/de...ite-a-workbook

    je ne sais pas si ça peut t'aider

    Valentin.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    Par défaut
    Merci Valentin, je connaissais cette documentation, mais je n'arrive pas à l'appliquer à mon cas

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

Discussions similaires

  1. [Python 3.X] Python, et sqlite : effacer des données dans un formulaire de saisie
    Par mfanfan dans le forum Général Python
    Réponses: 1
    Dernier message: 08/03/2015, 10h26
  2. Manipuler les données dans une base de données
    Par Ismatus1 dans le forum Tkinter
    Réponses: 9
    Dernier message: 28/11/2011, 14h15
  3. manipulation de donnée dans un tMap
    Par Zinou7 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 19/06/2010, 16h40
  4. Réponses: 6
    Dernier message: 05/05/2010, 10h18
  5. [Tableaux] Manipulation de données dans un Array
    Par arnaudperfect dans le forum Langage
    Réponses: 4
    Dernier message: 06/02/2009, 16h35

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