Python进行word模板内容替换的实现示例

2025-09-23 12:50

本文主要是介绍Python进行word模板内容替换的实现示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

技术背景与需求场景

  • Word模板在办公自动化中的重要性
  • python处理Word文档的常见需求(批量生成报告、合同等)
  • 传统手动替换的局限性及自动化解决方案的优势

核心工具库介绍

  • python-docx:基础读写操作,但默认不支持模板变量替换
  • docxtpl:基于python-docx的扩展,支持Jinja2模板语法
  • mailmerge:适用于简单邮件合并场景
  • 其他可选库(如docx-mailmerge)的简要对比

这里作者平常主要使用的是python-docx的方式,这里给大家提供一些常用word模板内容替换的方法及可能用到的函数

1.获取你的word模板内容

简单粗暴的方式,可以直接帮你看到你的模板每一个内容的数据及占位点(索引),其中当数据为字符串的内容,大多是直接展示,而当你看到某一个数据的为 " "字符串时,此时注意观察你模板中的上下文,该位置可能表示了你模板中的表格或者图形的占位(先记住,后面会用到!!)

def run():
    text0 = doc.paragraphs[0].text
    text1 = doc.paragraphs[1].text
    text2 = doc.paragraphs[2].text
    ...
    
if __name__ == '__main__':
    run()

2.正常文本内容的替换

当我们发现我们需要替换一段文字的时候,首先找到该段文字表示的位置,假如  

text0 = doc.paragraphs[0].text 此时是一段文字

# 省略导包,根据代码缺失的去安装

new_file_path = 'xxx' # 文件路径
doc = Document(new_file_path)

paragraphs_1_text = '这是我要替换的文字'

# 通用替换文本方式
def replace_paragraph_text(paragraph, new_text):
    """可以在该方法下新增对特定段落的额外处理"""
    # 遍历段落中的所有 runs
    for run in paragraph.runs:
        run.text = ""  # 清空每个 run 的文本

    # 将新文本插入到第一个 run 中,保留样式
    paragraph.runs[0].text = new_text

if __name__ == '__main__':
    text0 = "这是原来的文字" # 假设你的text0是这段文字
    replace_paragraph_text(doc.paragraphs[0], paragraphs_1_text) # doc.paragraphs[0]为你段落的位置, paragraphs_1_text则是要替换的文本。
    """ 使用该方式即可替换所有文字的段落 """
    

3.表格内容的替换

当发现我上面说的那种数据为空字符串的时候,而且你在模板中发现其为表格,就可以使用我下面的方式进行替换,一般表格的替换比较特殊,tables0 = doc.tables[xxx]来写表格的索引,可以不用去看段落的索引,而是根据你模板中的表格的数量索引来看,第一个表格索引就是0,以此类推。

tables0 = doc.tables[xxx] # 写你表格索引


def set_font_table(para, font_name="仿宋", font_size=12, char_spacing=None, bold=True):
    """
    设置段落的字体为指定字体和大小,并可设置字间距,同时支持加粗
    """
    for run in para.runs:
        run.font.name = font_name
        run.font.size = Pt(font_size)
        run.font.bold = bold  # 设置加粗
        if char_spacing:
            run.font.spacing = char_spacing

"""
可选部分,看是否删除表的数据 
"""
#for row_index in range(len(tables0.rows)-1, 0, -1):  # 从最后一行开始删除到第二行
#    if row_index > 0:  # 确保不删除表头行(假设表头是第一行)
#        tables0._element.remove(tables8.rows[row_index]._element)

# 根据 table_data 重新添加行和填充数据
#for row_index, row_data in enumerate(table_data, start=1):  # 从第二行开始
#    # row = tables0.add_row()  # 添加新的一行(根据上面是否删除表选择解注)
#    for col_index in range(min(column_count, len(row_data))):  # 保证不会超出列数范围
#        cell = row.cells[col_index]
#        cell.text = str(row_data[col_index])
#        for para in cell.paragraphs:
#            set_font_table(para, font_name="仿宋", font_size=12, bold=False)
#           http://www.chinasem.cn para.alignment = WD_ALIGN_PARAGRAPH.CENTER

# 常用部分
new_table_datawww.chinasem.cn = [[]] # 通常是这个格式,里面的每个[]存每一行表格数据

for row_index, row_data in enumerate(new_table_data, start=1):  # 从第二行开始
    for col_index, cell_data in enumerate(row_data, start=0):  # 从第一列开始
    # 获取每个单元格
        cell = tables0.cell(row_index, col_index)
        cell.text = str(cell_data)
        for para in cell.paragraphs:
        android    set_font_table(para, font_name="仿宋", font_size=12, bold=False)
            para.alignment = WD_ALIGN_PARAGRAPH.CENTER

一般通过上述方式可完成替换表格内容

4.图形内容的替换

首先需要用python的plt 方法进行生成图型(柱状图、折线图等),生成图形这部分代码省略,这里主要讲下如何进行段落替换,直接上代码:

chart_image_path = generate_bar_chart(数据内容, 地址) # 通过一个方法获取生成的柱状图地址
target_paragraph = doc.paragraphs[xxx] # 通过你的上下文段落来判断这里是否是一个图形,找出其对应的索引 

old_inline = None
for element in target_paragraph._element.findall('.//wp:inline', namespaces={'wp': 'http://schemas.openXMLformats.org/drawingml/2006/wordprocessingDrawing'}):
# for element in target_paragraph._element.iter():
    if element.tag.endswith("inline"):  # 检查是否是 <wp:inline> 元素
        old_inline = element
        break
from docx.shared import Inches
# 如果找到旧的 &landroidt;wp:inline> 对象
if old_inline is not None:
    # 插入新图片并获取其 <wp:inline> 对象
    new_runChina编程 = target_paragraph.add_run()
    new_inline = new_run.add_picture(chart_image_path, width=Inches(5.5))._inline

    # 替换旧的 <wp:inline> 对象
    parent = old_inline.getparent()
    parent.replace(old_inline, new_inline)
    # 删除新插入的 run(因为我们已经替换了旧的 <wp:inline>)
    target_paragraph._p.remove(new_run._element)

通常处理这样的word模板,是为了从某一数据源中,固定时间的获取某些数据来替换模板生成我们想要的报告文档之类的东西,为了实现自动化,该替换代码,通常在完成后,会与定时任务相关的东西相结合来使用。作者这里常用的是crontab来进行定时任务,大家可以借鉴或者是采取自己适合的方式进行处理。

到此这篇关于Python进行word模板内容替换的实现示例的文章就介绍到这了,更多相关Python word模板内容替换内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Python进行word模板内容替换的实现示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155983

相关文章

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一