【问题标题】:xlsx and xlsm files return badzipfile: file is not a zip filexlsx 和 xlsm 文件返回 badzipfile:文件不是 zip 文件
【发布时间】:2016-02-25 16:47:45
【问题描述】:

我试图打开一个 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_workbook 两个命令都会导致相同的错误。它们都存在于那个位置。为什么会出现这个错误?

【问题讨论】:

  • They both exist at that location. 但它们是 zip 文件吗?
  • 运行代码的用户是否有权访问这些位置的文件。同时使用zipfile库检查文件是否为zipfile。
  • 我在 Ubuntu 服务器中遇到了这个问题。在 Windows 上工作正常,但是当我部署到我的服务器时,我得到了这个。我尝试了 crussell、ericksonla 和 Manish Chaudhary 的答案,但没有成功。我的 .xlsx 文件没有密码保护。
  • @Pekka Excel 文件是 zip 文件

标签: python python-2.7 openpyxl


【解决方案1】:

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

pip install openpyxl --upgrade

源文件完全加密了吗?

【讨论】:

  • 文件已加密。我接受它,因为你问这将是一个问题?
  • 是的,这就是你问题的根源。 Openpyxl 不支持受密码保护的文件。
【解决方案2】:

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

当我从文件管理器创建 .xlsx 文件时,通过创建 .xlsx 格式的新文档,我遇到了同样的错误。但是当我用一些电子表格软件(libreoffice-calc)创建文件时,它工作得很好。我希望这可能会有所帮助。

【讨论】:

    【解决方案3】:

    当我将 openpyxl 指向文件的别名而不是原始文件时,这也发生在我身上。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 你能把这个变成看起来更像答案的东西吗?
        • 投反对票。不会在答案中添加任何内容。
        【解决方案6】:

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

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

        【讨论】:

        • 这与 Python 有什么关系?
        • 因为我在我的mac上使用openpxl并收到同样的错误,openpyxl是一个python库,sooooooo.......
        【解决方案7】:

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

        pip uninstall openpyxl
        
        pip install openpyxl==2.6.3
        

        希望对你有帮助。

        【讨论】:

        • 我试过这个没有成功。在 Windows 10 上,我的项目运行良好。但是当我部署到 Ubuntu 18.04 服务器时,我得到了同样的错误信息。有没有其他版本可以解决这个问题?我试过 2.6.3 和最后一个 3.0.3
        • 到目前为止我还没有其他版本,但是现在尝试使用xlwings,我觉得它很有效
        • 仅适用于 MAC 或 Windows。我在尝试安装时得到了这个:OSError: xlwings requires an installation of Excel and therefore only works on Windows and macOS. To enable the installation on Linux nevertheless, do: export INSTALL_ON_LINUX=1; pip install xlwings
        • 可能是因为你使用的是linux系统,没有Excel
        【解决方案8】:

        如果你用类似文件的对象调用openpyxl.load_workbook,一定要以二进制模式打开它。

        【讨论】:

        • 谢谢!这是我的问题
        • 我该怎么做?我在 load_workbook 中没有看到将其设置为二进制模式的参数。
        • python docs查找“二进制模式”
        • 具体来说,myfile = open("path/to/file", "rb")
        【解决方案9】:

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

        【讨论】:

        • 嗨 lucida lee,欢迎来到 StackOverflow! [will johnson|stackoverflow.com/a/50475794/5488275] 可能已经给出了您的答案。您可以做的是支持他的答案,在这种情况下,编辑他的答案(因为它可以改进)。这比添加重复的答案要好:)
        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

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

          for file in path.glob('*.xlsx'):print(file)
          

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

          filename=str(filename).split("\\")[-1:][0]
          

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

          if filename[0]!="~"
          

          【讨论】:

            【解决方案12】:

            就我而言,我收到此错误是因为我正在阅读我刚刚下载的一个非常大的文件。我在它完成下载之前将它复制到另一个位置,因此在尝试读取不完整/损坏的文件时出现错误。

            【讨论】:

              【解决方案13】:

              在我的情况下,我访问的文件之前已被 Workbook.save() 方法打开且未正确关闭。因为我正在调试我的代码并且由于路径不正确而导致该命令失败,所以文件已损坏。我不得不删除该文件,因为它无法恢复并创建一个新文件。

              【讨论】:

                【解决方案14】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2022-07-11
                  • 2021-11-25
                  • 2020-01-09
                  • 1970-01-01
                  • 2017-10-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多