2016-05-12 288 views
0

我有一個excel文件列表與最後一行相似。它包含有關客戶的私人信息(他的姓名,電話)。每個excel文件對應一個客戶端。我需要爲每個客戶端創建一個包含所有數據的excel文件。我決定自動做到這一點,所以看到openpyxl圖書館。我寫了下面的代碼,但它不能正常工作。無法讀取excel文件,使用openpyxl

import openpyxl 
import os 
import glob 
from openpyxl import load_workbook 
from openpyxl import Workbook 
import openpyxl.styles 
from openpyxl.cell import get_column_letter 

path_kit = 'prize_input/kit' 

#creating single document 
prize_info = Workbook() 
prize_sheet = prize_info.active 

file_array_reciever = [] 

for file in glob.glob(os.path.join(path_kit, '*.xlsx')): 
    file_array_reciever.append(file) 

row_num = 1 
for f in file_array_reciever: 
    f1 = load_workbook(filename=f) 
    sheet = f1.active 
    for col_num in range (3, sheet.max_column): 
     prize_sheet.cell(row=row_num, column=col_num).value = \ 
      sheet.cell(row=sheet.max_row, column=col_num).value 

    prize_info.save("Ex.xlsx") 

我得到這個錯誤:

Traceback (most recent call last): 
    File "/Users/zkid18/PycharmProjects/untitled/excel_test.py", line 43, in <module> 
    f1 = load_workbook(filename=f) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/openpyxl/reader/excel.py", line 183, in load_workbook 
    wb.active = read_workbook_settings(archive.read(ARC_WORKBOOK)) or 0 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/zipfile.py", line 1229, in read 
    with self.open(name, "r", pwd) as fp: 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/zipfile.py", line 1252, in open 
    zinfo = self.getinfo(name) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/zipfile.py", line 1196, in getinfo 
    'There is no item named %r in the archive' % name) 
KeyError: "There is no item named 'xl/workbook.xml' in the archive" 

看起來它是讀文件有問題。
我不明白它在歸檔中獲取名爲'xl/workbook.xml'的項目的位置。

+0

也許其中一個excel文件已損壞或使用不受openpyxl支持的功能。 – Muposat

+0

確保文件路徑正確,您可以在每次循環迭代中打印出'f'來確認。 – schaazzz

+0

你試圖閱讀的文件幾乎肯定存在問題。 –

回答

0

您可以使用xlrd biblioteque

這個腳本允許你一個excel數據轉換爲dictionnaries的列表

import xlrd 

workbook = xlrd.open_workbook('your_file.xlsx') 
workbook = xlrd.open_workbook('your_file.xlsx', on_demand = True) 
worksheet = workbook.sheet_by_index(0) 
first_row = [] # The row where we stock the name of the column 
for col in range(worksheet.ncols): 
    first_row.append(worksheet.cell_value(0,col)) 
# tronsform the workbook to a list of dictionnary 
data =[] 
for row in range(1, worksheet.nrows): 
    elm = {} 
    for col in range(worksheet.ncols): 
     elm[first_row[col]]=worksheet.cell_value(row,col) 
    data.append(elm) 
print data 
+0

據我所知,xlrd不支持xlsx –

+0

xlrd確實支持XLSX文件。這不是問題。 –

+0

我用xlsx文件試過了,它效果不錯 –

0

我猜你的文件爲.xls格式之前,你可以使用

try: 
    f1 = load_workbook(filename=f) 
except: 
    print f 

找到哪個文件導致此錯誤並在Excel中重新打開它,然後另存爲.xlsx。

0

根據您使用的是哪個版本,這可能是openpyxl中的一個錯誤。例如,在1.6.1中引入了一個表現這種行爲的錯誤。恢復到1.5.8固定它。根據這個openpyxl ticket有一個修復;雖然機票並未說明何時交付了修復程序,但它在2013年初提交。我升級到1.6.2,錯誤消失了。

+0

爲什麼downvote?升級我的版本的openpyxl恰恰是擺脫了KeyError:「存檔中沒有名爲'xl/workbook.xml'的項目,當我從1.5.8升級到1.6.1時開始出現。 – hlongmore