簡體   English   中英

無法讀取excel文件,使用openpyxl

[英]Can't read excel files, using openpyxl

我有一個最后一行類似的 excel 文件列表。 它包含有關客戶的私人信息(他的名字、姓氏、電話)。 每個excel文件對應一個客戶端。 我需要用每個客戶的所有數據制作一個 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'的項目。

選項 1:我通過添加read_only=True克服了這個問題:具體來說,替換

f1 = load_workbook(filename=f)

f1 = load_workbook(filename=f, read_only=True)

注:根據您的代碼, read_only=True可以使你的代碼非常緩慢。 如果您是這種情況,您可能需要嘗試選項 2。

選項 2:在 excel 中打開有問題的工作簿,然后將其重新保存為Strict Open XML Spreadsheet (*.xlsx)

根據您使用的版本,這可能是 openpyxl 中的錯誤。 例如,在 1.6.1 中引入了一個顯示此行為的錯誤。 恢復到 1.5.8 修復了它。 根據這個 openpyxl 有一個修復; 雖然故障單沒有說明修復何時交付,但它是在 2013 年初提交的。我升級到 1.6.2 並且錯誤消失了。

我發現這篇文章正在尋找類似問題的解決方案, ("There is no item named '[Content_Types].xml' in the archive")

就我的腳本或文件而言,這些錯誤消息都沒有任何意義。 我的腳本在現有 Excel 文檔中添加了 1 個工作表並更新了五個工作表。 當我的腳本運行時,我意識到我的代碼中有一個錯誤。 我在運行中取消了我的腳本。

取消后,現有的 Excel 文件顯示此錯誤。 使用腳本解決錯誤,也許您損壞了 Excel 文件?

為了解決這個問題,我正在考慮在使用 OpenPyXl 發生錯誤時創建一個臨時恢復文件。

我有同樣的問題,請確保您嘗試讀取的文件尚未在 Excel 中打開

您可以使用 xlrd biblioteque

此腳本允許您將 excel 數據轉換為字典列表

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

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

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

查找導致此錯誤的文件並在 Excel 中重新打開它,然后另存為 .xlsx。

如果 openpyxl 仍然不起作用,則使用 Pandas 有效。

$ pip install pandas xlrd

這段代碼有效:

import pandas as pd

df = pd.read_excel(file_path)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM