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

zw1*_*1ck 6 python python-2.7 openpyxl

我试图打开xlsx文件和xlsm文件都给我同样的错误

badzipfile: file is not a zip file
Run Code Online (Sandbox Code Playgroud)

这是我正在输入的内容:

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')
Run Code Online (Sandbox Code Playgroud)

两个load_workbook命令都会导致相同的错误.它们都存在于那个位置.为什么我收到此错误?

小智 8

如果您openpyxl.load_workbook使用类文件对象调用,请确保以二进制模式打开它。

  • 具体来说, `myfile = open("path/to/file", "rb")` (3认同)

小智 7

同样的问题发生在我身上,然后我注意到以下几点:

当我创建从文件管理器的.xlsx文件,通过创建的.xlsx格式的新文档,我有同样的错误.但是当我在我的情况下用一些电子表格软件(libreoffice-calc)创建文件时,它运行正常.我希望这可能有所帮助.


小智 7

我做了一些非常愚蠢的事情并得到了同样的错误。基本上,今天是我第一次尝试这个,我让它与“自动化”示例一起工作,然后尝试了我的 Excel。没用!我花了一段时间才意识到错误是由于工作簿密码受到保护。该错误根本不匹配,但是当我从工作簿中删除保护时,它起作用了!除了“duh”和“yeah!”,我还能说什么?

  • 你能把它变成看起来更像是一个答案的东西吗? (7认同)

小智 6

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

for file in path.glob('*.xlsx'):print(file)
Run Code Online (Sandbox Code Playgroud)

您可以通过检查跳过这些文件,从完整路径获取文件名:

filename=str(filename).split("\\")[-1:][0]
Run Code Online (Sandbox Code Playgroud)

检查文件名是否以“~”开头,因为所有恢复文件都以“~”开头

if filename[0]!="~"
Run Code Online (Sandbox Code Playgroud)


Pra*_*hav 5

这是因为您创建了没有元数据的空.xlsx,这是没有单元格格式的空文件。使用exel或等效的电子表格软件将空文件保存在该目录中,该文件将在保存后创建具有单元格格式的xlsx文件,然后尝试使用openpyxl加载文件


Bry*_*anE 5

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

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

  • 因为我在我的mac上使用openpxl并收到了同样的错误,openpyxl是一个python库,sooooooo....... (11认同)
  • 这与 Python 有什么关系? (4认同)

小智 3

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

pip install openpyxl --upgrade
Run Code Online (Sandbox Code Playgroud)

源文件是否已加密?

  • 文件已加密。我认为既然你问这会是一个问题吗? (2认同)