Bonjour à tous,

Dans un de mes programmes je dois lire un fichier Excel.
Je le fais via le code suivant :

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