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

如何使用OpenPyXL处理16MB及以上大体积xlsx文件并实现写入操作

OpenPyXL处理16MB及以上大体积Excel文件解决方案

核心思路:优先使用读写分离模式

OpenPyXL的read_only和write_only模式是专门为大文件设计的,两者搭配使用内存占用可以稳定维持在10MB以内,完全可以处理百MB级别的Excel文件。

  • 第一步:read_only模式读取源文件数据,仅加载你需要用到的工作表和行,完成修改逻辑
    示例代码:
    from openpyxl import load_workbook
    # 只读模式打开大文件,data_only=True直接读取单元格计算后的值,不加载公式
    src_wb = load_workbook("your_large_file.xlsx", read_only=True, data_only=True)
    src_ws = src_wb["你要处理的工作表名称"]
    
    processed_rows = []
    # 按需遍历行,不要全量加载整个工作表
    for row in src_ws.iter_rows(min_row=2, values_only=True): # 跳过表头直接取行值
        # 你的修改逻辑示例:将第3列数值乘以2
        row_list = list(row)
        if row_list[2]:
            row_list[2] *= 2
        processed_rows.append(row_list)
    
    src_wb.close()
    
  • 第二步:write_only模式写入处理后的数据到新文件
    示例代码:
    from openpyxl import Workbook
    # 初始化只写模式工作簿
    new_wb = Workbook(write_only=True)
    new_ws = new_wb.create_sheet("处理结果")
    # 先写入表头(如果需要保留原表头,可从源文件读取第一行写入)
    new_ws.append(["表头1", "表头2", "表头3", "表头4"])
    # 批量写入处理好的行
    for row in processed_rows:
        new_ws.append(row)
    # 保存文件
    new_wb.save("processed_file.xlsx")
    

若需要在原文件上直接修改

如果要保留原文件的样式、公式、批注等内容,不想生成新文件,可以调整普通加载模式的参数降低内存占用,16MB的文件基本可以正常加载修改:

  • 加载文件时添加keep_links=False参数禁用加载外部链接,data_only=True仅加载单元格值(不需要修改公式的前提下),内存占用可以降低40%以上
    示例代码:
    from openpyxl import load_workbook
    wb = load_workbook("your_large_file.xlsx", keep_links=False, data_only=True)
    ws = wb["目标工作表"]
    # 在这里完成你的修改逻辑,比如修改A2单元格的值
    ws["A2"] = "修改后的值"
    wb.save("your_large_file.xlsx")
    

注意事项

  • read_only模式仅支持读取操作,所有写入调用都会失效,不要尝试在该模式下修改文件
  • write_only模式仅支持按行追加写入,不支持随机修改指定单元格位置的内容,有随机修改需求请用普通加载调优方案
  • 若不需要保留Excel的高级样式和宏,可以先将文件转成CSV格式处理,处理完成后再存回Excel,运行速度会提升3倍以上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:15:01