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

Bibliothèques tierces Python Discussion :

python et excel [win32com] : caractériel ? SOS


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut python et excel [win32com] : caractériel ? SOS
    Salut la compagnie.

    Au programme, petit blème au niveau du lancement de mon application.
    J'ai parmi les modules que j'ai programmés le module XLS chargé de traiter les fichiers XLS et d'en importer les données dans python.

    En voici un fragment :
    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
     
    def importFeuille(chemin,nomFeuille,liDep,coDep):
        # paramètres : chemin du fichier à traiter, nom de la feuille, ligne et colonne de depart
        # Ouvre une feuille Excel et stocke son contenu dans une liste
        # récupère l'ID du commercial et l'ID de la visite
     
        # Retourne dans un dictionnaire :
        # une liste à 2 dimensions (liste), l'ID du commercial (IDcom) et l'ID de la visite (numvisite)
     
     
        excel = win32com.client.Dispatch('Excel.Application')
     
        classeur = excel.Workbooks.Open(chemin)
        feuille = classeur.Sheets(nomFeuille)
        # Recupere la feuille 'nomFeuille'
     
        coMax = feuille.UsedRange.Columns.Count
        # Recupere le nombre de colonne maximum
     
        liMax = feuille.UsedRange.Rows.Count
        # Recupere le nombre de ligne maximum
     
        liListe=[]
        for li in range(liDep,liMax+1):
            coListe=[]
            for co in range(coDep,coMax+1):
                cellule=feuille.Cells(li,co).Value  # Stocke la valeur de chaque cellule dans la variable 'cellule'...
                coListe.append(cellule)                 # ...et ajoute 'cellule' à 'coListe'
            liListe.append(coListe)                     # 'coListe' est ajoutee à 'liListe' avant d'etre reinitialisee
     
        numvisite = feuille.Cells(2,6).Value
        IDcom = feuille.Cells(3,3).Value
     
        excel.Workbooks.Close()
     
        dic={}
        dic['numvisite']=numvisite
        dic['IDcom']=IDcom
        dic['liste']=liListe
     
        return dic
    Pour exploiter ceci, j'utilise un programme principal (pour les besoins de la cause, test.py) faisant appel à cette fonction. Il ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a= importFeuille('emplacement de ma feuille',ligneDepart,colonneDepart)
    for ligne in a['liste']:
        print ligne
    print a['numvisite']
    print a['IDcom']
    Et 3 fois sur 4, tout ce que je gagne, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Traceback (most recent call last):
      File "C:\excel2sql\test.py", line 9, in ?
        a= importFeuille('C:/excel2sql/docTypecommerciaux/essai.xls','noteFrais',7,2)
      File "C:\excel2sql\xls.py", line 64, in importFeuille
        classeur = excel.Workbooks.Open(chemin)
      File "<COMObject <unknown>>", line 7, in Open
    com_error: (-2147352567, "Une exception s'est produite.", (0, 'Microsoft Excel', "'essai.xls' introuvable. V\xe9rifiez l'orthographe du nom du classeur et la validit\xe9 de l'emplacement.\n\nSi vous essayez d'ouvrir le fichier \xe0 partir de la liste des fichiers les plus r\xe9cents, assurez-vous que le fichier n'a pas \xe9t\xe9 renomm\xe9, d\xe9plac\xe9 ou supprim\xe9.", 'C:\\Program Files\\Microsoft Office\\Office\\1036\\xlmain9.chm', 0, -2146827284), None)
    Par contre, si je lance la feuille excel à traiter et que je la referme en laissant excel tourner, ca fonctionne. En revanche, si je lance excel directement avec un os.system.start(excel.exe), excel se lance mais mon appli affiche le message d'erreur ci-dessus.

    Je dois vous avouer que je pige pas tout...

    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 129
    Points : 184
    Points
    184
    Par défaut
    Si c'est pour le boulot, utilise les exemples du livre PythonWin32 ftp://ftp.oreilly.com/examples/pythonwin32/ il y a des classes toutes faites pour manipuler excel.

    Si c'est pour s'amuser : bonne chance

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    ben en fait... ni l'un ni l'autre.
    C'est pour illustrer les compétences en prog procédurale pour un BTS...
    Donc... utiliser ces classes parait un peu limite (j'y ai déjà jeté un coup d'oeil).
    Merci qd même.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Citation Envoyé par preacher_man
    ben en fait... ni l'un ni l'autre.
    C'est pour illustrer les compétences en prog procédurale pour un BTS...
    Donc... utiliser ces classes parait un peu limite (j'y ai déjà jeté un coup d'oeil).
    Merci qd même.
    Poutant tes variables excel, classeur, feuille etc ... sont des instances de classe ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    ca, je sais bien...
    Le seul truc est que ces classes-ci font tout le boulot...
    En clair, j'hésite framchement à les utiliser.
    Merci qd même pour le tuyau

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    et pensez-vous que si je lance le fichier à traiter et que je le ferme avant même de le traiter je peux arranger le truc ?

    si c'est le cas, j'utiliserai un os.startfile('chemin du fichier') pour l'ouvrir, mais pour le fermer sans fermer excel, que dois-je utiliser ?

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

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. Constantes Excel (win32com)
    Par fatbob dans le forum Général Python
    Réponses: 3
    Dernier message: 19/01/2012, 14h05
  4. Appel de python depuis excel
    Par Bayard dans le forum Général Python
    Réponses: 2
    Dernier message: 11/09/2010, 17h07
  5. Python et excel
    Par Jiyuu dans le forum Bibliothèques tierces
    Réponses: 9
    Dernier message: 05/11/2008, 13h35

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