Python openpyxl操作Excel代码执行成功但修改未生效问题排查
问题复现代码
from openpyxl import load_workbook, Workbook def find(wb, string): res = [] for ws in wb: for row in ws.values: for value in row: if value is not None and string in str(value): res.append(value) return res if __name__ == '__main__': wb = load_workbook("C:\po2.xlsx") ws = wb.active values = find(wb, "MAN279") # Replace findme with the string to find for value in values: ws.append([value]) wb.save("Book1.xlsx")
问题现象
脚本基于Python openpyxl库编写,预期功能为读取C盘路径下的po2.xlsx文件,查找所有包含字符串"MAN279"的单元格值,将匹配结果逐行追加到活动工作表后保存为Book1.xlsx文件。实际运行无报错、执行成功,但最终输出的Excel文件中未出现预期的追加内容。
问题诱因
- 路径转义隐患:Windows路径中
\为Python字符串转义符,虽然\p不属于标准转义序列不会直接报错,但部分环境下会出现路径解析偏差,导致实际加载的文件并非目标位置的po2.xlsx,最终匹配到的结果列表为空,无内容可追加。 - 保存路径无明确指向:
wb.save("Book1.xlsx")使用相对路径,文件会保存到Python进程的当前工作目录,该目录取决于脚本启动方式(IDE运行/命令行运行/双击运行的工作目录均可能不同),多数情况下用户找错了文件保存位置,误以为没有生成修改后的文件。 - 无结果校验逻辑:脚本未对匹配结果数量做判断,如果目标文件中确实不存在包含"MAN279"的单元格,追加循环不会执行任何写入操作,保存的文件和原文件完全一致,看起来就是没有修改。
修复方案
- 路径统一使用原始字符串格式,在路径字符串前加
r前缀,避免转义问题,例如加载路径写为r"C:\po2.xlsx"。 - 增加结果校验打印,执行查找后先输出匹配到的内容条数,确认是否真的查到了目标内容,快速定位是匹配逻辑问题还是文件保存问题。
- 保存文件时使用明确的绝对路径,避免找错文件位置,例如保存路径指定为
r"C:\Book1.xlsx",和源文件放在同一目录方便查找。
修复后可正常运行的完整代码:
from openpyxl import load_workbook def find(wb, string): res = [] for ws in wb: for row in ws.values: for value in row: if value is not None and string in str(value): res.append(value) return res if __name__ == '__main__': # 原始字符串写法避免路径转义问题 wb = load_workbook(r"C:\po2.xlsx") ws = wb.active values = find(wb, "MAN279") # 打印匹配结果数量做校验 print(f"匹配到符合条件的内容共{len(values)}条") for value in values: ws.append([value]) # 指定绝对保存路径 wb.save(r"C:\Book1.xlsx")
内容的提问来源于stack exchange,提问作者Allison
相关产品推荐
相关产品推荐

