Openpyxl无法读取xlsx文件,但如果我保存该文件,则可以打开。

6

所以,我尝试使用以下代码行打开一个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


2
你有没有找到解决这个问题的办法?我也遇到了同样的问题,手动打开并保存文件对我来说不是可行的解决方案。 - Jaume Clave
1
我所能想到的唯一出路是在比AKX提到的版本旧的Excel上创建文件。 - savingDuck468
2个回答

4
这似乎是一个关于某些Excel文件的Openpyxl错误,可以在此处报告:https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1071 不幸的是,看起来并没有修复它的方法,只有你找到的解决方法:
在最新版本的Excel中(版本1803(Build 9126.2259 Click-to-Run)),Microsoft已修改了Excel文件中存储超链接的方式。作为解决方法,您可以尝试在Google Sheets或LibreOffice中打开并重新保存文件。我在数据验证方面遇到了类似的问题。来源

1
我不想看到的真相 :(( 无论如何,感谢你的回答。 - savingDuck468
openpyxl 中没有 bug。 - Charlie Clark

1
可能的原因是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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接