使用openpyxl替换Excel字符串后无法保存生效的技术问题
问题分析与修复方案
我帮你找到问题所在啦!你的代码里有两个核心问题导致替换结果没保存到Excel里,咱们一步步来修复:
问题1:没有将替换后的值写回单元格
你计算出了替换后的rep变量,但从来没把这个值赋值给单元格的value属性——这就好比你改了草稿但没写到正式文档里,Excel自然不会有变化。必须在得到rep后执行cell.value = rep,才能把修改同步到工作表对象中。
问题2:单元格遍历逻辑错误 + 索引不规范
- 你同时嵌套了
iter_rows()和iter_cols(),这会导致重复遍历单元格,逻辑混乱。只需要用一种遍历方式就行,比如直接遍历iter_rows()返回的每一行里的单元格。 - openpyxl中工作表的行和列索引是从1开始的,不是0。虽然设置
min_row=0会被自动修正为1,但明确写min_row=1更清晰,避免歧义。
额外优化建议
- 可以先判断单元格的值是否为
None,避免str(cv)抛出异常; - 你用到的
re.search()没有使用返回结果,可以改成用它判断是否需要替换,减少不必要的字符串操作。
修正后的完整代码
import os, sys, re from openpyxl import load_workbook f = 'C:/Python3/CODES/output.xlsx' wb = load_workbook(f) for sheet in wb: print("checking sheet:", sheet) # 遍历指定范围内的行和单元格(从第1行到第2行,第1列到第1列) for row in sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=1): for cell in row: cv = cell.value # 先判断单元格有值才处理 if cv is not None: str_cv = str(cv) # 用re判断是否包含目标字符串,再执行替换 if re.search(r"Safety", str_cv): rep = str_cv.replace("Safety", "1pc") # 关键:把替换后的值写回单元格 cell.value = rep # 保存修改后的工作簿 wb.save('C:/Python3/CODES/output10.xlsx')
内容的提问来源于stack exchange,提问作者Shashank Jyotishi
相关产品推荐
相关产品推荐

