python - पायथन का उपयोग कर xlsx फ़ाइलों को पढ़ना




xlrd openpyxl (5)

Excel 2007 .xlsx और .xlsm फ़ाइलों से मूल डेटा (open_workbook (..., formatting_info = गलत)) पढ़ने के लिए समर्थन इस समय अल्फा परीक्षण में है। इस समूह में पिछली पोस्टिंग देखें ("एक्सेल 2007 xlsx" के लिए खोजें)।

एक्सेल के लिए xlrd समर्थन के संबंध में मंच से

मैंने पिछले साल पढ़ा था कि xlrd को xlsx फ़ाइलों (एक्सेल 2007, 2010) को पढ़ने में सक्षम होने के लिए अद्यतन किया जा रहा था। क्या इस विकास पर कोई अन्य खबर है, या अन्य पायथन उपयोगिता का उपयोग है?


XLSX फ़ाइलों को पढ़ना वास्तव में बहुत आसान है।

वे निश्चित नाम वाले कुछ एक्सएमएल दस्तावेज़ों के साथ ज़िप अभिलेखागार हैं।

आप कर सकते हैं - बहुत अधिक कोड के बिना - ज़िप संग्रह खोलें, प्रासंगिक XML दस्तावेज़ों का विश्लेषण करें, और डेटा के प्रासंगिक बिट्स को संसाधित करें।

यहां कुछ संकेत दिए गए हैं: http://slott-softwarearchitect.blogspot.com/2010/10/xlsm-and-xlsx-files-finally-reaching.html


पार्टी के लिए थोड़ा देर हो चुकी है, लेकिन xlrd अब मूल रूप से xlsx का समर्थन करता है। मैंने pip install xlrd --upgrade कमांड प्रॉम्प्ट ( WindowsKey + R तब cmd ) में pip install xlrd --upgrade का उपयोग करके 0.6.0 से 0.8.0 तक अपडेट किया और अब यह बिना किसी समस्या के xlsx को पढ़ता है।

xlrd


मानक पुस्तकालय का उपयोग करके यहां एक बहुत ही कठिन कार्यान्वयन है।

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

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






openpyxl