Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Excel, CSV, Python et UTF-8

8 réponses
Avatar
Plop !
Bonjour,

Je cherche à convertir une feuille excel en CSV.

Mais avec le code ci-dessous je n'arrive pas à me défaire d'une erreur
d'encodage. csv.writer a l'UTF-8 désactivé pour l'instant comme
l'explique la documentation.

Si quelqu'un peu m'éclairer ...

Merci !

Pour generer une erreur il faut créer un fichier excel avec des valeurs
avec des caractères accentués.

# -*- coding: Latin-1 -*-
#
# System
import wx
import sys, re, string
import smtplib
import win32com.client
import csv
import codecs

excel = win32com.client.Dispatch('Excel.Application')


row=""

classeur = excel.Workbooks.Open("C:/XLS/test.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


c = csv.writer(codecs.open("c:\XLS\\new.csv", "wb"), delimiter=";")
print feuille.UsedRange.value[0]
#or row in feuille.UsedRange.value:
# print row
#c.writerow(row)


excel.Workbooks.Close()
excel.Quit()

8 réponses

Avatar
bruno at modulix
Plop ! wrote:
Bonjour,

Je cherche à convertir une feuille excel en CSV.

Mais avec le code ci-dessous je n'arrive pas à me défaire d'une erreur
d'encodage.


Traceback, s'il te plait...

(snip)

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Cémoi
Bonjour,

Je cherche à convertir une feuille excel en CSV.



je vais peut-etre être hors sujet, mais je me risque: il existe un
module Python qui permet de lire et d'extraire des informations d'un
classeur Excel. Ce module fonctionne sur n'importe quelle plateforme
permettant d'executer du code Python et ne requiert aucun executable ou
bibliotheque MS Office.

Je ne sais pas si le module xlrd (c'est son nom) te permettra de te
tirer d'affaire mais je sais que son developpeur J. Machin est très
reactif et qu'il saura eventuellement corriger son module si un probleme
de support du code UTF-8 se présentait.

A propos la version 0.5.2 du module xlrd vient juste d'etre livrée
(http://cheeseshop.python.org/pypi/xlrd/0.5.2).
Les anglo-saxons ont l'habitude de poster ce genre de nouvelles sur leur
forum, a t'on les memes habitudes sur f.c.l.p ?

HTH,

Laurent

Avatar
Bertrand
c.writerow(row)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe8' in
position 4:
ordinal not in range(128)


Bonjour,

Je cherche à convertir une feuille excel en CSV.

Mais avec le code ci-dessous je n'arrive pas à me défaire d'une erreur
d'encodage. csv.writer a l'UTF-8 désactivé pour l'instant comme
l'explique la documentation.

Si quelqu'un peu m'éclairer ...

Merci !

Pour generer une erreur il faut créer un fichier excel avec des valeurs
avec des caractères accentués.

# -*- coding: Latin-1 -*-
#
# System
import wx
import sys, re, string
import smtplib
import win32com.client
import csv
import codecs

excel = win32com.client.Dispatch('Excel.Application')


row=""

classeur = excel.Workbooks.Open("C:/XLS/test.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


c = csv.writer(codecs.open("c:XLSnew.csv", "wb"), delimiter=";")
print feuille.UsedRange.value[0]
#or row in feuille.UsedRange.value:
# print row
#c.writerow(row)


excel.Workbooks.Close()
excel.Quit()


Avatar
Bertrand
Merci je suis en train de jeter un coup d'oeil.


Bonjour,

Je cherche à convertir une feuille excel en CSV.



je vais peut-etre être hors sujet, mais je me risque: il existe un
module Python qui permet de lire et d'extraire des informations d'un
classeur Excel. Ce module fonctionne sur n'importe quelle plateforme
permettant d'executer du code Python et ne requiert aucun executable ou
bibliotheque MS Office.

Je ne sais pas si le module xlrd (c'est son nom) te permettra de te
tirer d'affaire mais je sais que son developpeur J. Machin est très
reactif et qu'il saura eventuellement corriger son module si un probleme
de support du code UTF-8 se présentait.

A propos la version 0.5.2 du module xlrd vient juste d'etre livrée
(http://cheeseshop.python.org/pypi/xlrd/0.5.2).
Les anglo-saxons ont l'habitude de poster ce genre de nouvelles sur leur
forum, a t'on les memes habitudes sur f.c.l.p ?

HTH,

Laurent



Avatar
Méta-MCI
Bonsoir !


Je propose une autre solution, beaucoup plus simple et plus souple.
Il s'agit de lire les valeurs, dans une liste Python. Ensuite, on peut en
faire ce que l'on veut, y compris l'écrire dans un fichier CSV.

Exemple de code :

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = 1 #0 va plus vite
feuille = excel.Workbooks.Open("C:ess.xls")
listvaleur = excel.Range("A1:M500").Value
excel.Quit()
for lig in listvaleur:
print lig


Comme on récupère tout un bloc de données, en une seule instruction, c'est
très facile à programmer.



@-salutations

Michel Claveau
Avatar
Bertrand
Merci pour ce code. Mon probleme est que ça me renvoie de l'UTF8...


Bonsoir !


Je propose une autre solution, beaucoup plus simple et plus souple.
Il s'agit de lire les valeurs, dans une liste Python. Ensuite, on peut en
faire ce que l'on veut, y compris l'écrire dans un fichier CSV.

Exemple de code :

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = 1 #0 va plus vite
feuille = excel.Workbooks.Open("C:ess.xls")
listvaleur = excel.Range("A1:M500").Value
excel.Quit()
for lig in listvaleur:
print lig


Comme on récupère tout un bloc de données, en une seule instruction, c'est
très facile à programmer.



@-salutations

Michel Claveau




Avatar
Encolpe Degoute
Merci pour ce code. Mon probleme est que ça me renvoie de l'UTF8...


s.decode('utf-8').encode('cp1252')
ou
s.decode('utf-8').encode('iso8859-15')

pour passer en ascii pur c'est un peu plus compliqué:

import unicodedata

id = ''
try:
id = s.decode('utf-8')
except UnicodeDecodeError:
id = s.decode('cp1252', 'ignore')

id = unicodedata.normalize('NFKD', id)
id = id.encode('ascii', 'ignore')

--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Avatar
Bertrand
Merci ! Je vais tester ça de suite !




Merci pour ce code. Mon probleme est que ça me renvoie de l'UTF8...


s.decode('utf-8').encode('cp1252')
ou
s.decode('utf-8').encode('iso8859-15')

pour passer en ascii pur c'est un peu plus compliqué:

import unicodedata

id = ''
try:
id = s.decode('utf-8')
except UnicodeDecodeError:
id = s.decode('cp1252', 'ignore')

id = unicodedata.normalize('NFKD', id)
id = id.encode('ascii', 'ignore')