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

pandas结合openpyxl追加Excel时报错并造成文件损坏

报错根因
  • 核心触发原因:pd.ExcelWriter 默认使用覆写模式初始化
    代码中writer = pd.ExcelWriter(fn, engine='openpyxl')未指定运行模式,默认是mode='w'的覆写模式,初始化执行的瞬间就会把目标xlsx文件截断为0字节空文件。后续执行load_workbook(fn)时,读取的已经不是原有效Excel文件——而xlsx本质是zip格式的压缩包,空文件自然会抛出BadZipFile: File is not a zip file错误,反复运行几次后目标文件就会彻底损坏无法打开。
  • 循环逻辑冗余问题
    每匹配到一次符合comp == 'YYY'的分支,就重复执行一次Writer初始化、工作簿加载、写入、保存的全流程,不仅IO效率极低,每一次进入覆写模式的初始化都会重新截断文件,进一步提升文件损坏的概率。
  • 写入类型兼容问题
    提取到的name = df.iat[0,0]是单个标量值,不是标准的DataFrame结构,直接传入to_excel虽然有临时兼容处理,但容易出现格式异常。
修正后的可运行代码

将工作簿加载、Writer初始化的逻辑统一挪到循环外部,指定追加模式避免文件截断,循环内只做值提取和写入,循环结束后统一保存:

import pandas as pd
from openpyxl import load_workbook

# 文件路径配置
target_excel = r'C:\Users\Ahmed_Abdelmuniem\PycharmProjects\Pandas Parser\Survey.xlsx'
source_html = r'C:\Users\Ahmed_Abdelmuniem\Desktop\XXX.html'

# HTML表格提取逻辑
all_tables = pd.read_html(source_html)
filtered_table = [df for df in all_tables if len(df) > 2]

# 循环外统一初始化Writer,用追加模式避免清空原文件
excel_writer = pd.ExcelWriter(
    target_excel,
    engine='openpyxl',
    mode='a',
    if_sheet_exists='overlay'
)
workbook = load_workbook(target_excel)
excel_writer.book = workbook
excel_writer.sheets = {ws.title: ws for ws in workbook.worksheets}

current_write_row = 3
for df in filtered_table:
    comp_value = df.iat[1, 0]
    if comp_value == 'YYY':
        extracted_content = df.iat[0, 0]
        print(extracted_content)
        # 把单个值包装为单行DataFrame写入,规避类型兼容问题
        pd.DataFrame([extracted_content]).to_excel(
            excel_writer,
            sheet_name='Sheet1',
            header=None,
            index=False,
            startcol=4,
            startrow=current_write_row
        )
        current_write_row += 1

# 所有写入完成后统一保存关闭
excel_writer.close()
运行前准备
  • 提前删除已经被截断损坏的Survey.xlsx,重新创建一个空白的同名xlsx文件放到原路径,保证文件是有效可读取的格式
  • 建议将pandas升级到1.3及以上稳定版本,避免旧版本不支持if_sheet_exists参数、重复新建工作表的问题
  • 写入过程中不要手动打开目标Excel文件,避免文件占用导致的写入失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 14:06:03