使用openpyxl批量替换Excel中匹配!BError规则的字符串如何实现
Python批量替换Excel中指定格式字符串解决方案
核心思路
使用正则表达式匹配规则替换原有的精确字符串匹配,适配可变的中间字符场景。
代码修改说明
- 新增正则模块导入
在代码开头加入import re - 修正原文件名提取逻辑的语法错误
原代码中filenames = next(walk(pro)), (None, None, []))[2]存在多余括号,修正为filenames = next(walk(pro), (None, None, []))[2],同时新增后缀判断逻辑,避免非xlsx文件被误处理。 - 替换原有精确匹配逻辑为正则匹配
原固定replacer替换为正则匹配规则,匹配所有=任意字符!BError格式的内容。
完整可运行代码
import openpyxl import os from os import walk import re # 路径配置 os.chdir(r'C:\Users\username\Desktop\file') pro = 'pro/' extension = '.xlsx' # 提取文件名列表 filenames = next(walk(pro), (None, None, []))[2] filelist = [] for i in filenames: # 仅处理xlsx后缀的文件 if i.endswith(extension): new = i.replace(extension, "") filelist.append(new) # 正则匹配规则:匹配所有=开头、!BError结尾的最短内容 pattern = r'=.*?!BError' for i in filelist: filename = i + extension wb = openpyxl.load_workbook(pro+filename) ws = wb["Val"] for r in range(1, ws.max_row + 1): for c in range(1, ws.max_column + 1): cell_val = ws.cell(r, c).value # 跳过空单元格 if cell_val is None: continue s = str(cell_val) # 匹配成功则执行替换 if re.search(pattern, s): ws.cell(r, c).value = re.sub(pattern, '=', s) wb.save(i + extension)
规则说明
正则规则r'=.*?!BError中:
=严格匹配开头的等号.*?为非贪婪匹配,匹配最短的任意字符序列,避免误匹配长文本!BError严格匹配结尾的固定字符
可完全覆盖=[1]!BError、="_xlfn.SINGLE([11]!BError等所有符合格式的场景。
内容的提问来源于stack exchange,提问作者Chris Mcnight
相关产品推荐
相关产品推荐

