Python Pandas突然无法打开Excel文件(无法在OLE2复合文档中找到工作簿)
我有一个脚本,它读取一个xlsx excel文件,直到一周前该文件还可以正常工作。错误消息是: xlrd.biffh.xlrd错误:在OLE2复合文档中找不到工作簿 通过调试脚本,我找到了整个堆栈:Python Pandas突然无法打开Excel文件(无法在OLE2复合文档中找到工作簿),python,excel,pandas,xlrd,Python,Excel,Pandas,Xlrd,我有一个脚本,它读取一个xlsx excel文件,直到一周前该文件还可以正常工作。错误消息是: xlrd.biffh.xlrd错误:在OLE2复合文档中找不到工作簿 通过调试脚本,我找到了整个堆栈: C:\MyFolder\MyScript.py", line 42, in PandasReadExcel ef=pd.read_excel(excfile,sheetname,header,skiprows) File "C:\Python\Python36\lib\site-packa
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文件。对于我的“unluck”我不知道是谁更改了文件,它是由一个进行实验室分析的团队定期更新的,因此我不知道他们在文件中更改了什么。我只知道我可以毫无问题地打开/编辑该文件
一些线程建议更新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()
现在我可以重新正常加载数据了。在我的情况下,此问题表示文件已被公司安全策略锁定和加密。您可能无法通过此问题。