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
相关产品推荐
相关产品推荐

