J'ai lu l'année dernière que xlrd était en cours de mise à jour pour pouvoir lire les fichiers xlsx (Excel 2007, 2010). Y a-t-il des nouvelles de ce développement, ou de l'utilisation d'autres utilitaires Python ?
Réponses
Trop de publicités?
Mark Baker
Points
90240
Eric Gazoni a écrit openpyxl qui lit/écrit les fichiers xlsx Plus de détails disponibles auprès de son blog et le dépôt de code pour les codeurs Python qui souhaitent l'essayer
TankorSmash
Points
3443
Hooshmand zandi
Points
81
import openpyxl as px
import numpy as np
W = px.load_workbook('filename.xlsx', use_iterators = True)
p = W.get_sheet_by_name(name = 'Sheet1')
a=[]
for row in p.iter_rows():
for k in row:
a.append(k.internal_value)
# convert list a to matrix (for example 5*6)
aa= np.resize(a, [5, 6])
# save matrix aa as xlsx file
WW=px.Workbook()
pp=WW.get_active_sheet()
pp.title='NEW_DATA'
f={'A':0,'B':1,'C':2,'D':3,'E':4,'F':5}
#insert values in six columns
for (i,j) in f.items():
for k in np.arange(1,len(aa)+1):
pp.cell('%s%d'%(i,k)).value=aa[k-1][j]
WW.save('newfilname.xlsx')
Collin Anderson
Points
952
Voici une implémentation très très grossière utilisant uniquement la bibliothèque standard.
def xlsx(fname):
import zipfile
from xml.etree.ElementTree import iterparse
z = zipfile.ZipFile(fname)
strings = [el.text for e, el in iterparse(z.open('xl/sharedStrings.xml')) if el.tag.endswith('}t')]
rows = []
row = {}
value = ''
for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):
if el.tag.endswith('}v'): # <v>84</v>
value = el.text
if el.tag.endswith('}c'): # <c r="A3" t="s"><v>84</v></c>
if el.attrib.get('t') == 's':
value = strings[int(value)]
letter = el.attrib['r'] # AZ22
while letter[-1].isdigit():
letter = letter[:-1]
row[letter] = value
value = ''
if el.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
1.01pm
Points
759