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

标签 python excel pandas xlrd

我有一个读取 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/

相关文章:

python - 如何将 Scikit-learn 数据集转换为 Pandas 数据集

excel - 尽管 worksheet.xml 和 styles.xml 中没有存储有关小数精度的信息,Excel 如何正确显示小数值?

python - 在保留所有列的 Pandas 中获取每个类别的前 n 个值

python - 使用hough_line后关于hough_line_peaks的说明

python - 使用 elasticbeanstalk 部署 Flask 时出现 AWS mod_wsgi 错误

Excel 排名平局问题

excel - 搜索并用通配符替换为 LITERALS

python - Pandas 过滤数据框以仅显示包含零的行

python-3.x - Python3 无法识别 Pandas

python - 我的 Facebook 应用程序应该使用哪种授权