Python处理docx:如何为批量单词分配颜色码并实现高亮替换?
解决Word文档多颜色高亮文本替换问题
方法一:使用python-docx(跨平台)
适合无需依赖Word客户端的场景,通过遍历文档段落和文本块(run)实现精准替换:
首先导入依赖模块:
from docx import Document from docx.enum.text import WD_COLOR_INDEX
定义替换函数,可指定原文本、原高亮颜色、目标文本和目标高亮颜色:
def replace_highlighted_text(doc_path, old_text, old_color, new_text, new_color): doc = Document(doc_path) # 遍历所有段落 for para in doc.paragraphs: # 复制run列表避免遍历中修改导致异常 runs = para.runs.copy() for run in runs: # 检查当前run的高亮颜色是否匹配,且包含目标文本 if run.font.highlight_color == old_color and old_text in run.text: # 拆分文本,保留原文本中非目标部分的格式 parts = run.text.split(old_text) run.text = parts[0] # 逐个添加替换后的文本和剩余内容 for part in parts[1:]: # 添加替换后的文本,设置新高亮 new_run = para.add_run(new_text) new_run.font.highlight_color = new_color # 添加剩余文本,继承原run的格式 remaining_run = para.add_run(part) remaining_run.font.highlight_color = run.font.highlight_color remaining_run.font.bold = run.font.bold remaining_run.font.italic = run.font.italic remaining_run.font.size = run.font.size # 保存修改后的文档 doc.save(f"modified_{doc_path}")
调用示例(替换粉色高亮的app为绿色高亮的apple):
replace_highlighted_text( "your_document.docx", "app", WD_COLOR_INDEX.PINK, "apple", WD_COLOR_INDEX.GREEN )
方法二:使用win32com.client(Windows平台,依赖Word客户端)
利用Word原生的查找替换功能,处理效率更高,支持跨文本块的匹配,适合大文档:
先安装依赖:
pip install pywin32
定义替换函数:
import win32com.client as win32 def replace_highlighted_com(doc_path, old_text, old_color_code, new_text, new_color_code): word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = False doc = word.Documents.Open(doc_path) # 配置查找规则:匹配指定文本和高亮颜色 find_obj = word.Selection.Find find_obj.ClearFormatting() find_obj.Text = old_text find_obj.Font.HighlightColorIndex = old_color_code # 配置替换规则:设置新文本和高亮颜色 find_obj.Replacement.ClearFormatting() find_obj.Replacement.Text = new_text find_obj.Replacement.Font.HighlightColorIndex = new_color_code # 执行全局替换 find_obj.Execute(Replace=2) # 2对应Word常量wdReplaceAll doc.SaveAs(f"modified_{doc_path}") doc.Close() word.Quit()
调用示例(粉色对应代码5,绿色对应代码13):
replace_highlighted_com( "your_document.docx", "app", 5, "apple", 13 )
补充说明
- WD_COLOR_INDEX枚举包含了Word所有可用的高亮颜色,也可以直接使用对应的数值(比如粉色5、绿色13)。
- python-docx方法需注意:如果目标文本被拆分在多个run中,需要额外处理跨run的匹配逻辑;win32com方法则无需担心这个问题,完全复用Word的原生查找能力。
内容的提问来源于stack exchange,提问作者sevenlemon
相关产品推荐
相关产品推荐

