Bonjour à tous,
Dans un de mes programmes je dois lire un fichier Excel.
Je le fais via le code suivant :
Le problème c'est que dès qu'il y a un caractère accentué (comme "é, è, ê, ë, à, ù, ...") ou "exotique" (comme "@, °, µ, £, $, ¤, &, `, §, ç, ...") mon script plante et refuse de continuer en me disant ce message d'erreur :
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 def readxlsfile(fichier_xls): excel = win32com.client.Dispatch('Excel.Application') classeur = excel.Workbooks.Open(fichier_xls) feuille = classeur.ActiveSheet #On recupere la feuille courante maxcol = feuille.UsedRange.Columns.Count #Recupere le nombre de colonne maximum maxline = feuille.UsedRange.Rows.Count #Recupere le nombre de ligne maximum sht = classeur.Worksheets(feuille.name) donnees_lues = sht.Range(sht.Cells(1, 1), sht.Cells(maxline, maxcol)).Value donnees_lues = list(donnees_lues) #donnees_lues est une matrice de type "tuple" de "tuple" #Pour faciliter le traitement par la suite on la convertit en matrice de "list" de "list" #Pour finir on convertit chaque case de la matrice en chaîne de caractère for i in range(len(donnees_lues)): donnees_lues[i]=list(donnees_lues[i]) del donnees_lues[i][0] #on supprime la colonne 1 del donnees_lues[i][3] #on supprime la colonne 5 j = 0 while j < len(donnees_lues[i]): donnees_lues[i][j]=str(donnees_lues[i][j]) j = j + 1 # excel.Workbooks.Close() excel.Quit() del excel return donnees_lues
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Traceback (most recent call last): File "C:\xxxx\script.py", line 98, in readxlsfile donnees_lues[i][j]=str(donnees_lues[i][j]) UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
--> Par exemple ici c'est un "é" que le programme ne peut pas transformer en caractère.
C'est le cast du tuple en list qui plante. Mais la question est comment faire pour que ça fonctionne?
Merci pour votre aide
ffets
Partager