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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符