Python中如何实现替换Word文档中固定内容的demo?

我想通过 python 实现对固定模板文档简单的替换、然后生成新的文档。想求一份 demo,不知道有没有人有这闲工夫。。。。
Python中如何实现替换Word文档中固定内容的demo?

18 回复

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', '旧公司名', '新公司名')

核心要点:

  1. 使用python-docx库处理Word文档
  2. 需要遍历文档的所有段落和表格单元格
  3. 通过paragraph.runs保持原有格式
  4. 替换后保存为新文件避免覆盖原文件

安装依赖:

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 了解一下

回到顶部