You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl加载Excel报BadZipFile非zip文件错误如何解决

openpyxl加载工作簿触发「BadZipFile: File is not a zip file」报错排查修复

核心报错原因

.xlsx格式本质是zip压缩打包的结构化文件集合,触发这个报错的直接原因是程序传给load_workbook的文件不是合法的zip格式包,结合给出的代码,最核心的逻辑错误是执行顺序问题:

  1. 调用pd.ExcelWriter(workbook, engine='openpyxl')时未指定写入模式,默认使用mode='w'覆盖写入模式,这行代码执行的瞬间会直接把目标路径下的Test.xlsx截断为0字节的空文件
  2. 截断文件之后才调用load_workbook(workbook)读取这个空文件,空文件不符合xlsx的zip格式规范,直接抛出BadZipFile错误
  3. 代码中还存在额外逻辑错误:writer.book = workbook把字符串类型的文件路径赋值给了writer的book属性,而非加载到的工作簿对象;最后调用xl.writer.excel.save_workbook属于跨库的错误调用,和当前使用的openpyxl引擎不匹配。

其他常见诱发场景:

  • 目标Test.xlsx本身已损坏,比如下载/传输不完整、被其他程序(WPS、Microsoft Excel)占用锁死导致读取到不完整内容
  • 文件格式伪造:将.csv、.xls等其他格式的文件强行改后缀为.xlsx,openpyxl无法解析
  • 路径下根本不存在对应文件,或路径拼写错误,程序读到了其他无意义的0字节文件

报错运行时提示如下:
BadZipFile运行报错截图

排查步骤

  • 先校验文件本身:手动打开C:\Desktop路径找到Test.xlsx,查看文件大小,如果显示0KB说明已经被之前的运行逻辑清空;双击用Excel打开,如果提示文件损坏,就先恢复备份或手动新建一个合法的xlsx文件,同时确认文件没有被其他办公软件打开占用。
  • 校验文件格式:确认文件是原生xlsx格式,而非改后缀伪造的文件。如果是旧版.xls格式需要换用xlrd引擎读取,如果是.csv格式直接用pandas的csv读写接口即可,不需要用openpyxl。
  • 校验代码逻辑:如果是修改已有文件,必须先加载工作簿,再初始化追加模式的ExcelWriter,不能先用w模式打开截断文件再读。

修复后代码

import pandas as pd
from openpyxl import load_workbook

# 配置路径和目标工作表
file_path = r'C:\Desktop\Test.xlsx'
target_sheet = 'Data'

# 第一步:先加载正常存在的合法工作簿,此时文件未被截断
wb = load_workbook(file_path)
# 第二步:初始化追加模式的ExcelWriter,传入已加载的工作簿对象
writer = pd.ExcelWriter(
    file_path,
    engine='openpyxl',
    mode='a',
    if_sheet_exists='overlay'  # 保留文件内其他工作表,在现有工作表基础上写入
)
writer.book = wb
writer.sheets = {ws.title: ws for ws in wb.worksheets}
ws = writer.sheets[target_sheet]

# 写入vehicle_sales数据集,从第2行开始写入(保留第1行原有表头)
for i in range(len(vehicle_sales)):
    row_data = list(vehicle_sales.iloc[i])
    for j in range(len(vehicle_sales.columns)):
        ws.cell(row=i+2, column=j+1, value=row_data[j])

# 存盘关闭,不需要调用其他库的存盘方法
writer.close()

注意:如果是要新建文件而非修改已有文件,不需要提前调用load_workbook,直接用默认w模式初始化ExcelWriter,写完数据后调用close()存盘即可,不会触发该报错。

内容的提问来源于stack exchange,提问作者John peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:18:21