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

使用Python从SQL数据库导出Excel时遇'File is not a zip file'错误求助

问题解决:Pandas循环写入Excel报错'File is not a zip file'

错误原因

原代码每次循环重复打开、修改并关闭Excel文件,容易引发文件读写冲突,导致文件内容损坏,无法被识别为合法的.xlsx压缩包(.xlsx本质是zip格式的文件集合)。此外,手动创建空工作簿后多次操作的方式也增加了文件损坏的概率。

修复后的openpyxl方案

无需每次循环单独操作文件,一次性初始化ExcelWriter,批量写入所有工作表后统一保存,避免文件操作冲突:

import pandas as pd

# 直接初始化ExcelWriter,自动创建文件
writer = pd.ExcelWriter('result.xlsx', engine='openpyxl')

for table in tables_list:
    query = f"select * from {table}"
    df = pd.read_sql_query(query, engine)
    # 写入当前表到对应工作表
    df.to_excel(writer, sheet_name=table)

# 所有表写入完成后统一关闭保存
writer.close()

如果必须保留逐次写入的逻辑,需使用追加模式并确保文件正确处理:

import pandas as pd
from openpyxl import load_workbook, Workbook

def write_table_to_excel(table, file):
    # 加载已存在的工作簿
    book = load_workbook(file)
    # 使用追加模式打开writer,存在同名工作表则替换
    with pd.ExcelWriter(file, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
        writer.book = book
        query = f"select * from {table}"
        df = pd.read_sql_query(query, engine)
        df.to_excel(writer, sheet_name=table)

# 先创建空工作簿(仅第一次执行需要)
book = Workbook()
book.save('result.xlsx')

for table in tables_list:
    write_table_to_excel(table, 'result.xlsx')

不使用openpyxl的替代方案

方案1:使用xlsxwriter引擎

xlsxwriter支持直接批量写入多工作表,无需手动管理工作簿,代码更简洁且不易出错:

import pandas as pd

# 使用xlsxwriter引擎创建ExcelWriter
with pd.ExcelWriter('result.xlsx', engine='xlsxwriter') as writer:
    for table in tables_list:
        query = f"select * from {table}"
        df = pd.read_sql_query(query, engine)
        df.to_excel(writer, sheet_name=table)

方案2:使用pandas默认引擎

若系统已安装xlsxwriter或openpyxl,可省略引擎参数,pandas会自动选择可用引擎:

import pandas as pd

with pd.ExcelWriter('result.xlsx') as writer:
    for table in tables_list:
        query = f"select * from {table}"
        df = pd.read_sql_query(query, engine)
        df.to_excel(writer, sheet_name=table)

内容的提问来源于stack exchange,提问作者Marharyta Kalynchuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:13:00