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 :

Remplissage d'un Excel


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Par défaut Remplissage d'un Excel
    Bonjour à tous,


    je suis un peu perdu j'essayer de remplir un Excel mais quand j'ouvre l'Excel, il n'y a que les dernière ligne qui sont afficher alors qu'il doit afficher plusieurs lignes.

    Voila mon code
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    # coding: utf-8
    import cx_Oracle
    import os.path
    import os
    import datetime
    import os.path, time
    import shutil
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.base import MIMEBase
    from email import encoders
    import xlsxwriter
     
    def requete_to_stock_BVT(taille):
    #Nous créeons notre requête SQL ici
     sql=   """
            SELECT *
            FROM prod_stok
            where QTE_"""+ taille +""" < 100
                and code_art_com IN ('5046','5101','86545','5408','87115','84320','87795','86440','86118','5346','5021','0046','90007',
                          '7-110046','184','317','884401','884400','802149','802147','2603','2504','2202','10745','10746',
                          '10779','11383','11938','11341','13317','14521','14940')
                and code_lieu= 'BVT'
                and typ_enrg = '0'
                and sais IN('00P','21E')
            """
     try:
         #Connexion à la base de donnée
         with cx_Oracle.connect("user", "pass", "base de donnnées") as connection:
             with connection.cursor() as cursor:
                cursor.execute(sql)
                wb = xlsxwriter.Workbook('alert_BVT.xlsx')
                ws = wb.add_worksheet()
                compteur_ligne = 0
                ws.write("A1","Lieu")
                ws.write("B1","Magasin")
                ws.write("C1","Saison")
                ws.write("D1","Article")
                ws.write("E1","Couleur")
                ws.write("F1","60/36")
                ws.write("G1","65/38")
                ws.write("H1","70/40")
                ws.write("I1","75/42")
                ws.write("J1","80/44")
                ws.write("K1","85/46")
                ws.write("L1","90/48")
                ws.write("N1","95/50")
                ws.write("M1","100/52")
                ws.write("O1","105/54")
                ws.write("P1","110/56")
                ws.write("Q1","115/58")
                for row in cursor:
                    compteur_ligne += 1
                    ws.write(compteur_ligne,0,str(row[0]))
                    ws.write(compteur_ligne,1,str(row[1]))
                    ws.write(compteur_ligne,2,str(row[2]))
                    ws.write(compteur_ligne,3,str(row[3]))
                    ws.write(compteur_ligne,4,str(row[4]))
                    ws.write(compteur_ligne,5,str(row[8]))
                    ws.write(compteur_ligne,6,str(row[9]))
                    ws.write(compteur_ligne,7,str(row[10]))
                    ws.write(compteur_ligne,8,str(row[11]))
                    ws.write(compteur_ligne,9,str(row[12]))
                    ws.write(compteur_ligne,10,str(row[13]))
                    ws.write(compteur_ligne,11,str(row[14]))
                    ws.write(compteur_ligne,12,str(row[15]))
                    ws.write(compteur_ligne,12,str(row[16]))
                    ws.write(compteur_ligne,13,str(row[17]))
                    ws.write(compteur_ligne,14,str(row[18]))
                    ws.write(compteur_ligne,15,str(row[19]))
                    ws.write(compteur_ligne,16,str(row[20]))
     
                wb.close()
    #Cette partie de code nous renvois les erreurs de la requête s'il y en a.
     except cx_Oracle.Error as error:
        print(error)
     
    def alert_to_stock_BVT():
        for y in range(12):
            if y >= 1:
                requete_to_stock_BVT(str(y))
     
    alert_to_stock_BVT();

  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
    Salut,

    Pourquoi vous n'écrivez pas une fonction qui lit la base de données, une autre qui écrit ce qu'on veut dans le fichier EXCEL. Ca permet de les tester indépendamment, puis lorsqu'elles fonctionnent, vous les composez.

    L'autre avantage est que si vous avez un problème, vous pourrez poster une code qui permette de le reproduire... Là, on ne peut pas parce qu'il faut la base de données et si la bourde n'est pas facile à détecter en lisant votre code, ben, si on ne peut pas reproduire, on ne peut pas vous donner des idées... Dommage!

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Par défaut
    Salut,

    Merci pour ta réponse mais c'est bien le code que j'utilise mais je pense le problème viens du compteur_ligne.

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Par défaut
    la modification que j'ai faite est la suivante j'ai crée une variable dit global pour que je ne me retrouve pas avec un compteur qui se réinitialiser tout le temps mais maintenant dans le fichier Excel il n'y a plus de ligne.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    # coding: utf-8
    import cx_Oracle
    import os.path
    import os
    import datetime
    import os.path, time
    import shutil
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.base import MIMEBase
    from email import encoders
    import xlsxwriter
     
    compteur_ligne = 0
     
    def requete_to_stock_BVT(taille):
    #Nous créeons notre requête SQL ici
     sql=   """
            SELECT *
            FROM prod_stok
            where QTE_"""+ taille +""" < 100
                and code_art_com IN ('5046','5101','86545','5408','87115','84320','87795','86440','86118','5346','5021','0046','90007',
                          '7-110046','184','317','884401','884400','802149','802147','2603','2504','2202','10745','10746',
                          '10779','11383','11938','11341','13317','14521','14940')
                and code_lieu= 'BVT'
                and typ_enrg = '0'
                and sais IN('00P','21E')
            """
     try:
         #Connexion à la base de donnée
         with cx_Oracle.connect("user", "pass", "base de données") as connection:
             with connection.cursor() as cursor:
                cursor.execute(sql)
                wb = xlsxwriter.Workbook('alert_BVT.xlsx')
                ws = wb.add_worksheet()
                global compteur_ligne
                ws.write("A1","Lieu")
                ws.write("B1","Magasin")
                ws.write("C1","Saison")
                ws.write("D1","Article")
                ws.write("E1","Couleur")
                ws.write("F1","60/36")
                ws.write("G1","65/38")
                ws.write("H1","70/40")
                ws.write("I1","75/42")
                ws.write("J1","80/44")
                ws.write("K1","85/46")
                ws.write("L1","90/48")
                ws.write("N1","95/50")
                ws.write("M1","100/52")
                ws.write("O1","105/54")
                ws.write("P1","110/56")
                ws.write("Q1","115/58")
                for row in cursor:
                    compteur_ligne += 1
                    ws.write(compteur_ligne,0,str(row[0]))
                    ws.write(compteur_ligne,1,str(row[1]))
                    ws.write(compteur_ligne,2,str(row[2]))
                    ws.write(compteur_ligne,3,str(row[3]))
                    ws.write(compteur_ligne,4,str(row[4]))
                    ws.write(compteur_ligne,5,str(row[8]))
                    ws.write(compteur_ligne,6,str(row[9]))
                    ws.write(compteur_ligne,7,str(row[10]))
                    ws.write(compteur_ligne,8,str(row[11]))
                    ws.write(compteur_ligne,9,str(row[12]))
                    ws.write(compteur_ligne,10,str(row[13]))
                    ws.write(compteur_ligne,11,str(row[14]))
                    ws.write(compteur_ligne,12,str(row[15]))
                    ws.write(compteur_ligne,12,str(row[16]))
                    ws.write(compteur_ligne,13,str(row[17]))
                    ws.write(compteur_ligne,14,str(row[18]))
                    ws.write(compteur_ligne,15,str(row[19]))
                    ws.write(compteur_ligne,16,str(row[20]))
     
                wb.close()
    #Cette partie de code nous renvois les erreurs de la requête s'il y en a.
     except cx_Oracle.Error as error:
        print(error)
     
    def alert_to_stock_BVT():
        for y in range(12):
            if y >= 1:
                requete_to_stock_BVT(str(y))
    alert_to_stock_BVT();

  5. #5
    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
    Salut,

    Citation Envoyé par azaouali Voir le message
    j'ai crée une variable dit global pour que je ne me retrouve pas avec un compteur qui se réinitialiser tout le temps mais maintenant dans le fichier Excel il n'y a plus de ligne.
    Quel est l'intérêt de faire çà? L'intention est d'écrire chaque ligne lue depuis la base de donnée dans des lignes successives d'une nouvelle feuille vierge pas à la suite de ce que contient déjà la feuille.

    En plus si vous pensez que vous ne retrouvez pas le nombre de lignes lues dans le fichier EXCEL, la première question à vous poser serait combien de lignes ont été lues et écrites (il suffit d'afficher la valeur du compteur à la sortie de la boucle).

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

  6. #6
    Membre confirmé
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Par défaut
    Oui, le nombre est 154 ce qui correspond au ligne qui sont renvoyé par la base de données

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

Discussions similaires

  1. Remplissage automatique tableau Excel
    Par Ternote dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2019, 09h04
  2. remplissage tableau excel
    Par zayn dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/07/2006, 21h40
  3. [VBA - E] Automation et remplissage d'un tableau Excel
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2006, 09h10
  4. Remplissage aléatoire sur Excel
    Par Trooper2 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2006, 18h14
  5. Remplissage feuille excel à partir d'un dbGrid
    Par izidor dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 22/02/2006, 18h09

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