写入大数据量DataFrame到Excel报use_zip64()不存在错误,如何解决?
问题根因
你的代码存在三个核心问题,直接导致写入报错、文件体积过大:
- 引擎混用:外层
pd.ExcelWriter指定了openpyxl引擎,内层df.to_excel又指定xlsxwriter引擎,两者调用逻辑不兼容,直接触发写入报错 - 未开启大文件支持:超过2GB的Excel文件需要ZIP64扩展支持,你注释掉的
use_zip64()方法未正确启用 - 未开启压缩配置:默认写入参数未启用最高等级压缩,生成的文件体积远超必要大小
修复代码
根据你的使用场景(追加工作表到已有Excel文件),调整后代码如下:
import openpyxl as pxl import pandas as pd import gc def updated_files_with_new_work_sheet(file_name, sheetpxl_name, df, index_value=False): try: # 加载已有工作簿 excel_book = pxl.load_workbook(file_name) # 统一使用openpyxl引擎,开启ZIP64支持和最高压缩等级 with pd.ExcelWriter( file_name, engine='openpyxl', engine_kwargs={ 'zip64': True, 'compression': {'archive_name': 'xl/worksheets/{}.xml'.format(sheetpxl_name), 'compresslevel': 9} } ) as writer: writer.book = excel_book writer.sheets = {ws.title: ws for ws in excel_book.worksheets} # 移除多余的engine参数,统一用外层的openpyxl df.to_excel(writer, sheet_name=sheetpxl_name, index=index_value) gc.collect() except FileNotFoundError: # 新文件场景用xlsxwriter获得更好的压缩效果 with pd.ExcelWriter( file_name, engine='xlsxwriter', engine_kwargs={ 'use_zip64': True, 'options': {'compression_level': 9} } ) as writer: df.to_excel(writer, sheet_name=sheetpxl_name, index=index_value)
补充说明
- 压缩等级设为9是ZIP格式的最高压缩比,可根据你的性能需求在1-9之间调整,数值越高压缩比越高、写入速度越慢
- 若单工作表行数超过1048576、列数超过16384,超出Excel文件格式的上限,建议拆分多个工作表输出
内容的提问来源于stack exchange,提问作者Jogi Kumar
相关产品推荐
相关产品推荐

