You need to enable JavaScript to run this app. Openpyxl遍历目录下Excel文件时wb.save()缺失filename参数咨询
优惠活动
大模型
产品
解决方案
定价
更多

Openpyxl遍历目录下Excel文件时wb.save()缺失filename参数咨询

报错核心原因

wb.save() 要求必须传入待保存的目标文件完整路径作为参数,openpyxl 的工作簿对象不会自动记录加载时读取的原文件路径,遍历场景下没有将当前处理的文件路径传入方法,才会触发缺参报错。

代码调整思路

原逻辑需要补全三个关键点:

  • 遍历过程中过滤非Excel格式文件,避免读取目录下的临时文件、非表格文件触发加载错误
  • 直接复用每次循环中加载文件时拼接的完整路径传给wb.save(),即可实现修改后原文件覆盖保存
  • 增加工作表存在性判断,避免重复创建同名"ABC"工作表
修正后的可运行代码
import openpyxl
import os

target_dir = r"DIRECTORYPATH"
for file_name in os.listdir(target_dir):
    # 过滤非Excel文件、Office打开时生成的临时锁文件
    if not file_name.lower().endswith((".xlsx", ".xls")) or file_name.startswith("~$"):
        continue
    # 拼接当前处理文件的完整路径
    current_file_path = os.path.join(target_dir, file_name)
    wb = openpyxl.load_workbook(current_file_path)
    # 仅在工作表不存在时创建
    if "ABC" not in wb.sheetnames:
        wb.create_sheet("ABC")
    # 传入当前文件路径,完成修改保存
    wb.save(current_file_path)
    wb.close()
wb.save() 传值规则说明
  • 参数本身没有特殊语法要求,只要是符合系统规则的文件路径字符串即可
  • 单文件场景下使用的wb.save(path)写法,本质就是传入了单个文件的完整路径,和遍历场景下循环拼接的current_file_path作用完全一致
  • 若不想覆盖原文件,可在拼接路径时自定义新的文件名,比如wb.save(os.path.join(target_dir, f"modified_{file_name}")),即可将修改后的内容另存为新文件,不改动原始文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 00:36:00