Pandas 的 open_excel() 在处理 Excel 文件时遇到了 xlrd.biffh.XLRDError:无法在 OLE2 复合文档中找到工作簿。

8

我正在尝试使用pandas解析一个.xlsm文档。我的代码在我得到的示例文件上完美运行,但是一旦我得到其他文件,就会出现上述错误。以下是引起问题的堆栈跟踪:

Traceback (most recent call last):
  File "@@@@@@@@/UnsupervisedCAM.py", line 9, in <module>
    info_dict = read_excel_to_dict('files/' + filename)
  File "@@@@@@@@\readCAM.py", line 7, in read_excel_to_dict
    df = pandas.read_excel(filename, parse_cols='E,G,I,K,Q,O')
  File "@@@@@@@@\Anaconda3\envs\tensorflow\lib\site-packages\pandas\io\excel.py", line 191, in read_excel
    io = ExcelFile(io, engine=engine)
  File "@@@@@@@@\Anaconda3\envs\tensorflow\lib\site-packages\pandas\io\excel.py", line 249, in __init__
    self.book = xlrd.open_workbook(io)
  File "@@@@@@@@\Anaconda3\envs\tensorflow\lib\site-packages\xlrd\__init__.py", line 441, in open_workbook
    ragged_rows=ragged_rows,
  File "@@@@@@@@\Anaconda3\envs\tensorflow\lib\site-packages\xlrd\book.py", line 87, in open_workbook_xls
    ragged_rows=ragged_rows,
  File "@@@@@@@@\Anaconda3\envs\tensorflow\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

我甚至不知道从哪里开始... 在网上找不到任何有用的东西。

3个回答

5

我遇到了同样的错误信息,并通过删除xlsx文件的密码保护来解决它。 (并不是说这是错误的唯一原因,但值得检查!)


1
这应该是一条评论,而不是答案(来自审核) - FrankS101

1

经过大量搜索,我发现唯一的方法是打开并保存所有Excel文档,这似乎会“剥离”它们的OLE2格式。我使用以下vbs脚本自动化了该过程:

Dim objFSO, objFolder, objFile
Dim objExcel, objWB
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("scripting.filesystemobject")
   MyFolder = "<PATH/TO/FILES"
Set objFolder = objfso.getfolder(myfolder)
For Each objFile In objfolder.Files
If Right(objFile.Name,4) = "<EXTENSION>" Then
Set objWB = objExcel.Workbooks.Open(objFile)
objWB.save
objWB.close
End If
Next
objExcel.Quit
Set objExcel = Nothing
Set objFSO = Nothing
Wscript.Echo "Done"

请确保更改文件夹路径和扩展名。

我曾经遇到过同样的问题,也不明白为什么会出现这种情况。这个脚本也非常有用! - user1527152

0
如果你遇到了这个问题,就像我在寻找错误时在Jupyter笔记本上遇到的一样,你可以简单地重启内核,问题就会得到解决。

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