我有一个读取 xlsx excel 文件的脚本,该文件直到一周前都运行良好。错误信息是:
xlrd.biffh.XLRDError:在 OLE2 复合文档中找不到工作簿
通过调试脚本,我找到了整个堆栈:
C:\MyFolder\MyScript.py", line 42, in PandasReadExcel
ef=pd.read_excel(excfile,sheetname,header,skiprows)
File "C:\Python\Python36\lib\site-packages\pandas\io\excel.py", line 191, in read_excel
io = ExcelFile(io, engine=engine)
File "C:\Python\Python36\lib\site-packages\pandas\io\excel.py", line 249, in __init__
self.book = xlrd.open_workbook(io)
File "C:\Python\Python36\lib\site-packages\xlrd\__init__.py", line 441, in open_workbook
ragged_rows=ragged_rows, File "C:\Python\Python36\lib\site-packages\xlrd\book.py", line 87, in open_workbook_xls
ragged_rows=ragged_rows,
File "C:\Python\Python36\lib\site-packages\xlrd\book.py", line 595, in biff2_8_load
raise XLRDError("Can't find workbook in OLE2 compound document")
xlrd.biffh.XLRDError: Can't find workbook in OLE2 compound document
通过查看此处和 GitHub 中的类似案例,我发现此错误通常发生在 xlsm 文件或受密码保护的文件中。但相关的 Excel 工作簿不受密码保护,并且是一个 xlsx 文件。不幸的是,我不认识更改该文件的人,该文件由进行实验室分析的团队定期更新,因此我不知道他们在文件中更改了哪些内容。我所知道的是我可以毫无问题地打开/编辑该文件。
一些线程建议更新 pandas 或 xlrd 版本(我正在使用 pandas 0.19.2),我想避免这种情况,因为脚本在远程服务器中运行,更新版本会影响其他脚本的正常工作,具体取决于此常规。
我感谢任何知道如何解决此问题的人。
最佳答案
经过几个月的努力解决这个错误,我了解到相关文件正在使用旧版本的 Microsoft Office(在本例中为 Office 2007)进行编辑。然后我决定实现一个笨拙的解决方案: 只需使用兼容的 Excel 版本打开文件,并将副本保存在不同的文件夹中即可;然后使用 pandas read_excel 函数打开文件,它应该可以正常打开! 为了自动执行此任务,我编写了一个 powershell 脚本,只是为了打开原始文件并保存副本。该脚本必须根据数据更新的频率来执行:
$FileName = "\\path\to\the\source\file.xlsx"
$FileNameCopy = "\\path\to\the\copy\file.xlsx"
$xl = New-Object -comobject Excel.Application
# repeat this for every file concerned
$wb = $xl.Workbooks.open("$FileName",3)
$wb.SaveAs($FileNameCopy)
$wb.Close($False)
$xl.Quit()
现在我可以再次正常加载数据了。
关于python - Pandas突然无法打开Excel文件(在OLE2复合文档中找不到工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60459144/