Python xlsx和xlsm文件返回badzipfile:文件不是zip文件

Python xlsx和xlsm文件返回badzipfile:文件不是zip文件,python,python-2.7,openpyxl,Python,Python 2.7,Openpyxl,我试图同时打开一个xlsx文件和一个xlsm文件,这两个文件都给出了相同的错误 badzipfile:文件不是zip文件 以下是我正在键入的内容: import openpyxl wb=openpyxl.load_workbook('c:\\users\\me\\documents\\filename.xlsm', keep_vba=True) wb2=openpyxl.load_workbook('c:\\users\\me\\documents\\filename2.xlsx') 两个lo

我试图同时打开一个xlsx文件和一个xlsm文件,这两个文件都给出了相同的错误

badzipfile:文件不是zip文件

以下是我正在键入的内容:

import openpyxl
wb=openpyxl.load_workbook('c:\\users\\me\\documents\\filename.xlsm', keep_vba=True)
wb2=openpyxl.load_workbook('c:\\users\\me\\documents\\filename2.xlsx')

两个
load\u工作簿
命令都会导致相同的错误。它们都存在于那个地方。为什么会出现此错误?

我的直觉是,您的openpyxl版本不是最新的(2.3.1),或者源文件有问题。要升级到openpyxl的最新版本,请使用:

pip install openpyxl --upgrade

源文件加密了吗?

我也遇到了同样的问题,然后我注意到以下几点:


当我从文件管理器创建.xlsx文件时,通过使用.xlsx格式创建新文档,我遇到了相同的错误。但在我的例子中,当我用一些电子表格软件(libreofficecalc)创建这个文件时,它工作得很好。我希望这会有所帮助。

当我将openpyxl指向文件的别名而不是原始文件时,我也遇到了这种情况。

这是因为您创建了没有元数据的空.xlsx,它是一个没有单元格格式的空文件。使用exel或等效的电子表格软件将空文件保存在该目录中,这将创建一个带有单元格格式的xlsx文件,保存后尝试使用openpyxl加载文件。我做了一件非常愚蠢的事情,并得到了相同的错误。 基本上,今天是我第一次尝试这个,我让它与“自动化”的例子,然后尝试我的Excel。 没用! 我花了一段时间才意识到错误是由于工作簿密码受到保护。 错误与此完全不匹配,但当我从工作簿中删除保护时,它起作用了!
除了“是”和“是”我还能说什么

我参加聚会迟到了,但我收到了同样的错误,但原因不同


在我的mac电脑上,当我将.xlsx文件剪切粘贴到我想要的目录中时,它实际上并没有放置文件本身,而是放置了一个符号链接。出于某种原因,这会引起同样的错误。我通过打开文件并使用“另存为”来纠正这个问题

我已经面临这个错误一段时间了,所以我刚刚卸载了openpyxl并重新安装了2.6.3版,它运行得很好。 这也可能对您有所帮助,无需更改任何内容,只需使用pip运行这些命令即可

pip uninstall openpyxl

pip install openpyxl==2.6.3

希望它能对您有所帮助。

如果您调用
openpyxl.load\u工作簿
使用类似文件的对象,请确保以二进制模式打开它。

xlsx文件可能有密码,您无权访问。
删除密码,您可以使用openpyxl.load_workbook()访问它。

我也遇到了同样的问题。这是因为我试图用Python打开的文件已经在运行。您需要检查您试图在Python中打开的文件是否未在tasks中运行

您试图打开的XLSX或XLS或XLSM文件是以“~”开头的excel恢复文件。您可以通过以下方式进行检查:

for file in path.glob('*.xlsx'):print(file)
通过选中“从完整路径获取文件名”,可以跳过这些文件:

filename=str(filename).split("\\")[-1:][0]
检查文件名是否以“~”开头,因为所有恢复文件都以“~”开头


在我的例子中,我收到这个错误是因为我正在读取一个我刚刚下载的非常大的文件。在下载完成之前,我将其复制到了另一个位置,因此在尝试读取不完整/损坏的文件时出错。

在我的情况下,我访问的文件先前已被打开,但未通过
工作簿.save()方法正确关闭。由于我正在调试代码,但由于路径不正确而未能执行此命令,因此文件已损坏。我不得不删除该文件,因为它无法还原并创建一个新文件。

我也遇到了同样的问题,谢谢大家的提示。 我的问题是,我打开的excel.xlsx文件已损坏。因此openpyxl无法打开。
我必须重新创建文件。

它们都存在于该位置。
但它们是zip文件吗?运行代码的用户是否可以访问这些位置的文件。还可以使用
zipfile
库检查文件是否为zipfile。我在Ubuntu服务器中遇到了这个问题。在windows上工作很好,但是当我部署到服务器时,我得到了这个。我试过克鲁塞尔、埃里克索拉和曼尼什·乔杜里的答案,但没有成功。我的.xlsx文件没有密码保护。这些文件是加密的。我认为这是一个问题?是的,这是你问题的根源。Openpyxl不支持受密码保护的文件。你能把它转换成看起来更像答案的东西吗?这与Python有什么关系?因为我在mac上使用openpxl时收到了相同的错误,Openpyxl是一个Python库,Soooooooo…….嗨,lucida lee,欢迎来到StackOverflow!您的答案可能已经由[will johnson |给出。您可以做的是对他的答案进行投票,在这种情况下,编辑他的答案(因为答案可以改进)。这比添加一个重复的答案要好:)谢谢!这是我的问题我该怎么做?我在load\u工作簿中没有看到将其设置为二进制模式的参数。请在以下位置查找“二进制模式”:“code>myfile=open”(“path/to/file”,“rb”)
我尝试过这个版本,但没有成功。在windows 10上,我的项目运行得很好。但是当我部署到Ubuntu 18.04服务器时,我收到了相同的错误消息。是否有其他版本可以解决这个问题?我尝试过2.6.3,最后一个版本是3.0.3。据我所知,目前没有其他版本,但现在尝试使用xlwings,我发现它非常可行仅适用于MAC或Windows。我在尝试安装时得到了以下信息:
OSError:xlwings需要安装Excel,因此只能在Windows和macOS上运行。不过,要在Linux上启用安装,请执行以下操作:export install\u on_Linux=1;pip install xlwings
可能是因为您使用的是Linux系统,并且没有Excel
if filename[0]!="~"