Python中如何实现替换Word文档中固定内容的demo?
我想通过 python 实现对固定模板文档简单的替换、然后生成新的文档。想求一份 demo,不知道有没有人有这闲工夫。。。。
Python中如何实现替换Word文档中固定内容的demo?
python 有个库的 现在模板里建好书签就行
from docx import Document
import re
def replace_in_docx(file_path, old_text, new_text):
"""
替换Word文档中所有出现的指定文本
Args:
file_path: Word文档路径
old_text: 要替换的旧文本
new_text: 替换后的新文本
"""
# 加载文档
doc = Document(file_path)
# 遍历所有段落
for paragraph in doc.paragraphs:
if old_text in paragraph.text:
# 使用正则表达式保留格式替换
inline = paragraph.runs
for i in range(len(inline)):
if old_text in inline[i].text:
text = inline[i].text.replace(old_text, new_text)
inline[i].text = text
# 遍历所有表格
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
if old_text in paragraph.text:
inline = paragraph.runs
for i in range(len(inline)):
if old_text in inline[i].text:
text = inline[i].text.replace(old_text, new_text)
inline[i].text = text
# 保存文档
new_file_path = file_path.replace('.docx', '_replaced.docx')
doc.save(new_file_path)
print(f"替换完成,新文件保存为: {new_file_path}")
return new_file_path
# 使用示例
if __name__ == "__main__":
# 替换文档中的"旧公司名"为"新公司名"
replace_in_docx('example.docx', '旧公司名', '新公司名')
核心要点:
- 使用
python-docx库处理Word文档 - 需要遍历文档的所有段落和表格单元格
- 通过
paragraph.runs保持原有格式 - 替换后保存为新文件避免覆盖原文件
安装依赖:
pip install python-docx
使用场景:
- 批量替换合同模板中的占位符
- 更新文档中的公司名称、日期等信息
- 标准化文档中的特定术语
一句话建议: 记得先备份原文件,用runs操作可以保持格式不变。
Docxtpl 了解一下
Docx-mailmerge
也是可以的,比较适合你说的这个情景
我是用 excel+word 用 vba 做的
docxtpl 可以,但是如果你的数据足够大的话可能会随时 GG。
如果你试过的话应该知道 office 都是基于 xml 实现的,那么很简单了,用 docxtpl 的思想,用 jinja2 书写模板之后修改 document.xml 中的部分 xml 标签隔断,渲染模板最后再压缩回去~
什么库,就是这个 docxtpl 吗?
好的,感谢我去搜来学习一下
好的,非常感谢。有没有现成的教程链接,实现方式不重要,我只是恰好电脑上装有 python。
嘿嘿,对。因为时间紧迫,所以就伸手了
好的感谢,数据应该不算大。我去了解一下
docx 就是一个 zip,python 解压之后只需要修改 xml 文件的内固定位置的内容就行,在打包就行了
能说的详细些不?没看懂,html 用 jinja2 替换弄过,world 的 doc 文档不是不太开源,怎么会和 xml 有关系
能说说具体实现方式不
你把 word 的 docx 解压会发现就是一个 zip 压缩包,其中最关键的部分是 word/document.xml 去更改里面的内容就可以啦~
那是不是我就可以用 docx 做模板了
xml 里面设置项目的替换,用 jinja2 替换,然后 zip 压缩改名为 docx 后缀,以前见有的把 html 格式作为模板,保存在数据库的是 xml 文件,估计和这个类似
是的呀,提供一个我目前用的正则处理 xml 标签隔断的代码~
https://github.com/JamCh01/simple_template/blob/master/simple_tamplate/tools.py#L39
直接用 Word 的模板系统不就好了。。。。。。dotx 了解一下


