Pandas 突然无法打开 Excel 文件(在 OLE2 复合文档中找不到工作簿

Pandas suddenly cannot open Excel file (can't find workbook in OLE2 compound document

我有一个脚本可以读取一个 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 文件。致我 "unluck" 我不知道更改文件的人,它由进行实验室分析的团队定期更新,所以我不知道他们在文件中更改了什么。我所知道的是我可以open/edit那个文件没有问题。

一些线程建议更新 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()

现在我的数据又可以正常加载了。