如何使用python-docx替换Word文档页眉页脚中的占位符文本
使用python-docx修改Word页眉页脚中的占位符
完全可以通过python-docx工具修改Word文档页眉、页脚里的文本,包括替换预先设置的{{PLACEHOLDER_TEXT}}占位符。以下是具体实现方法:
核心思路
Word文档的页眉和页脚内容存储在对应节(Section)的header和footer对象中,每个页眉/页脚包含若干段落(Paragraph),我们只需遍历这些段落,定位到占位符并替换即可。如果占位符带有格式,建议遍历段落中的run对象进行替换,避免丢失原有格式。
代码示例
基础替换(无格式要求)
from docx import Document def replace_placeholder_in_headers_footers(doc_path, placeholder, new_text): doc = Document(doc_path) # 遍历所有文档节 for section in doc.sections: # 处理页眉 for paragraph in section.header.paragraphs: if placeholder in paragraph.text: paragraph.text = paragraph.text.replace(placeholder, new_text) # 处理页脚 for paragraph in section.footer.paragraphs: if placeholder in paragraph.text: paragraph.text = paragraph.text.replace(placeholder, new_text) # 保存修改后的文档 doc.save("modified_" + doc_path) # 调用示例 replace_placeholder_in_headers_footers("original.docx", "{{PLACEHOLDER_TEXT}}", "替换后的实际文本")
保留格式的替换(针对带格式的占位符)
如果占位符所在文本有字体、颜色等格式,直接替换段落文本会丢失格式,此时需要遍历段落中的run对象:
from docx import Document def replace_placeholder_with_format(doc_path, placeholder, new_text): doc = Document(doc_path) def replace_in_runs(container): for paragraph in container.paragraphs: for run in paragraph.runs: if placeholder in run.text: run.text = run.text.replace(placeholder, new_text) # 处理所有节的页眉和页脚 for section in doc.sections: replace_in_runs(section.header) replace_in_runs(section.footer) doc.save("modified_with_format_" + doc_path) # 调用示例 replace_placeholder_with_format("original.docx", "{{PLACEHOLDER_TEXT}}", "带格式保留的替换文本")
注意事项
- 如果文档包含多个节(Section),务必遍历所有节的页眉和页脚,因为不同节的页眉页脚可能独立设置。
- 若占位符存在于表格、文本框等特殊容器中,需要额外遍历对应容器内的段落或run对象。
内容的提问来源于stack exchange,提问作者John Wilmer Dela Cerna




