You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:00:33