【问题标题】:Openpyxl can't read xlsx file, but if i save the file, it opensOpenpyxl 无法读取 xlsx 文件,但如果我保存文件,它会打开
【发布时间】:2020-09-29 19:15:28
【问题描述】:

所以,我尝试用 openpyxl 用这一行打开一个 excel 文件

wb_bs = openpyxl.load_workbook(filename=filepath)

得到了这个错误:


C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\styles\stylesheet.py:214: UserWarning: Workbook contains no default style, apply openpyxl's default
  warn("Workbook contains no default style, apply openpyxl's default")
Traceback (most recent call last):
    wb_bs = openpyxl.load_workbook(filename=url_nova, data_only=True)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
    reader.read()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 280, in read
    self.read_worksheets()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 228, in read_worksheets
    ws_parser.bind_all()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 434, in bind_all
    self.bind_cells()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 337, in bind_cells
    for idx, row in self.parser.parse():
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 149, in parse
    obj = prop[1].from_tree(element)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\descriptors\serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\descriptors\serialisable.py", line 103, in from_tree
    return cls(**attrib)
TypeError: __init__() got an unexpected keyword argument 'address'
PS C:\Users\T-Gamer\Python programs\cmtrat\Cmtrat Helper> & C:/Users/T-Gamer/AppData/Local/Programs/Python/Python38-32/python.exe "c:/Users/T-Gamer/Python programs/cmtrat/Cmtrat Helper/excel_scripts/ostest.py"
C:\Users\T-Gamer\Python programs\cmtrat\Cmtrat Helper\excel_scripts\copias\diario_padrao.xlsx
C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\styles\stylesheet.py:214: UserWarning: Workbook contains no default style, apply openpyxl's default
  warn("Workbook contains no default style, apply openpyxl's default")
Traceback (most recent call last):
    wb_bs = openpyxl.load_workbook(filename=url_nova, data_only=True)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
    reader.read()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 280, in read
    self.read_worksheets()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 228, in read_worksheets
    ws_parser.bind_all()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 434, in bind_all
    self.bind_cells()
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 337, in bind_cells
    for idx, row in self.parser.parse():
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_reader.py", line 149, in parse
    obj = prop[1].from_tree(element)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\descriptors\serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "C:\Users\T-Gamer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\descriptors\serialisable.py", line 103, in from_tree
    return cls(**attrib)
TypeError: __init__() got an unexpected keyword argument 'address'

事情是:

  • 如果我创建 .xlsx 文件,它会打开
  • 如果我从这个特定来源(我需要的那个)下载文件并尝试立即打开它,则会产生错误。
  • 如果我在打开并保存 .xlsx 文件后运行代码(无更改),它可以工作。

我认为这与excel版本冲突有关,但我已经尝试了所有方法,似乎没有任何效果。

openpyxl==3.0.5 python==3.8.5

【问题讨论】:

  • 您是否找到了解决此问题的方法?为我体验相同的手动打开和保存文件不是一个可行的解决方案。
  • 我能想到的唯一出路是在旧版本的 Excel(比下面提到的 AKX 旧)上创建文件。

标签: python excel openpyxl


【解决方案1】:

这似乎是关于某些 Excel 文件的 Openpyxl 错误,在此报告:https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1071

不幸的是,似乎没有解决方法,只有您找到的解决方法:

在刚刚发布的 Excel 版本(版本 1803(Build 9126.2259 Click-to-Run))中,微软修改了超链接在 Excel 文件中的存储方式。作为一种解决方法,您可以尝试在 Google 表格或 LibreOffice 中打开并重新保存文件。我在数据验证方面遇到了类似的问题。
Source

【讨论】:

  • 我不想读的真相:((无论如何,谢谢你的回答。
  • 不是 openpyxl 中的错误。
【解决方案2】:

原因可能是 MS-Windows 的安全防护:每当您从外部源(互联网)下载 MS-Office 文件时,MS-Windows 都会在该文件中插入一个标志,标记该文件要在受保护的视图中打开只要。在您启用编辑并保存设置了安全标志的文件之前,该保护将保持不变。

打开新下载的 MS-Office 文件时出现的警告文本:

PROTECTED VIEW
Be careful - files from the Internet can contain viruses.
Unless you need to edit, it's safer to stay in Protected View.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多