Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas突然无法打开Excel文件(无法在OLE2复合文档中找到工作簿)_Python_Excel_Pandas_Xlrd - Fatal编程技术网

Python Pandas突然无法打开Excel文件(无法在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

我有一个脚本,它读取一个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-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()

现在我可以重新正常加载数据了。

在我的情况下,此问题表示文件已被公司安全策略锁定和加密。您可能无法通过此问题。