63 votes

Lecture de fichiers xlsx à l'aide de Python

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 ?

54voto

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

49voto

TankorSmash Points 3443

Un peu tard pour la fête, mais xlrd prend désormais en charge de manière native xlsx . Je suis passé de 0.6.0 a 0.8.0 en utilisant pip install xlrd --upgrade dans l'invite de commande ( WindowsKey + R puis cmd ) et maintenant on lit xlsx sans aucun problème.

http://pypi.python.org/pypi/xlrd

11voto

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

11voto

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

3voto

1.01pm Points 759

Support pour la lecture des données de base (open_workbook(...., formatting_info=False)) à partir de fichiers Excel 2007 .xlsx et .xlsm est actuellement en test alpha. test alpha pour le moment. Voir les messages précédents dans ce groupe (recherche pour "excel 2007 xlsx").

Du forum Concernant le support xlrd pour excel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X