如何使用Python修改Word文档,仅替换黄色高亮文本并保留固定白色文本?
Python实现仅替换Word文档黄色高亮文本方案
依赖安装
- 首先需要安装
python-docx库用于处理docx格式文件,安装命令:
pip install python-docx
实现逻辑
遍历文档所有段落、表格内的文本块(run),判断文本块的高亮颜色是否为黄色,仅对黄色高亮的文本块执行内容替换,非高亮的白色文本全程不做修改,可重复对原始模板执行替换操作生成新文档。
完整可运行代码
from docx import Document from docx.enum.text import WD_COLOR_INDEX def replace_yellow_highlight_text(input_docx_path, output_docx_path, replace_content): """ 替换docx文件中所有黄色高亮的文本 :param input_docx_path: 原始Word模板文件路径 :param output_docx_path: 替换后输出的文件路径 :param replace_content: 传入字典时按原始高亮文本内容匹配替换;传入列表时按高亮出现的顺序依次替换 """ doc = Document(input_docx_path) replace_list = None replace_index = 0 if isinstance(replace_content, list): replace_list = replace_content.copy() # 遍历普通段落的文本 for para in doc.paragraphs: for run in para.runs: if run.font.highlight_color == WD_COLOR_INDEX.YELLOW: if replace_list: if replace_index < len(replace_list): run.text = replace_list[replace_index] replace_index += 1 else: if run.text in replace_content: run.text = replace_content[run.text] # 遍历表格中的文本(覆盖表格内的高亮内容) for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: for run in para.runs: if run.font.highlight_color == WD_COLOR_INDEX.YELLOW: if replace_list: if replace_index < len(replace_list): run.text = replace_list[replace_index] replace_index += 1 else: if run.text in replace_content: run.text = replace_content[run.text] doc.save(output_docx_path) # 使用示例 if __name__ == "__main__": # 方式1:按原始高亮内容匹配替换,适合模板有固定提示文字的场景 replace_map = { "姓名": "张三", "日期": "2024年5月20日", "项目名": "XX项目" } replace_yellow_highlight_text("原始模板.docx", "输出文档1.docx", replace_map) # 方式2:按高亮出现顺序依次替换,不需要匹配原始内容的场景 # replace_list = ["张三", "2024年5月20日", "Name1", "Name2", "Name3"] # replace_yellow_highlight_text("原始模板.docx", "输出文档2.docx", replace_list)
注意事项
- 仅支持
.docx格式文件,若为.doc格式需要先另存为.docx再使用 - 代码默认处理文字高亮格式的黄色文本,如果黄色背景是段落填充、文本框填充等格式,需要对应调整判断逻辑
- 每次替换都基于原始模板执行,不会修改原始模板,可多次传入不同的替换内容生成多个新文档
内容的提问来源于stack exchange,提问作者RandallCloud
相关产品推荐
相关产品推荐

