2016-05-12 252 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