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.