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:
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:
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:
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...:cfou:
Merci d'avance.