Python自动化批量生成Word文档:利用docxtpl与pandas实现模板填充

橘子海
橘子海
发布时间:2026-10-16 | 2人浏览过
原创

本文介绍如何使用Python的docxtpl和pandas库,通过预设Word模板批量生成包含特定数据的文档。文章详细讲解了环境配置、库安装、CSV数据读取、模板渲染及文件保存的完整流程,并提供了常见错误(如乱码、权限问题)的解决方案,适用于需要处理大量重复性文档生成的场景。

一、需求说明

在日常办公中,处理Word文档是高频任务。常遇到一种典型场景:文档主体内容固定,仅少量关键信息需要动态变更。

面对此类任务,若手动逐一打开、修改并保存文档,当数量较少时尚可应付,但一旦数据量庞大,繁琐的重复操作极易引发效率低下与情绪烦躁。

为解决这一痛点,本文推荐一款高效工具——docxtpl库。借助该工具,只需准备一份标准模板,即可由计算机自动完成剩余的数据填充工作,实现自动化处理。

执行此方案前,需确保计算机已配置好Python运行环境及相应的开发工具。

若尚未完成环境搭建,可参考后续提供的安装指南。

若主要使用Python进行数据处理、爬虫抓取、数据分析、自动化脚本编写或机器学习项目,建议采用“Python基础环境 + Jupyter Notebook”的组合,具体安装与使用可参考《Windows/Mac 安装、使用Python环境+jupyter notebook》一文。

若计划利用Python开展Web项目开发,则推荐使用“Python基础环境 + PyCharm”组合。Windows用户可参考《Windows下安装、使用Pycharm教程,这下全了》,Mac用户可参考《Mac下玩转Python-安装&使用Python/PyCharm》。

二、核心工具介绍

docxtpl是一个功能强大的Python库,其核心机制是通过加载.docx格式的文档模板,对模板中的占位符进行解析与替换,从而实现文档内容的动态修改。

pandas是Python中提供高性能、易用数据类型及数据分析工具的核心库,常用于结构化数据的处理与分析。

三、环境依赖安装

在Windows系统中,按下Win+R键打开运行窗口,输入cmd进入命令提示符(Mac用户请直接打开终端),随后执行以下命令以安装所需第三方库:

pip install docxtpl

pip install pandas

四、实战案例演示

本案例旨在生成某学校计算机与信息工程学院的新生入学通知书合集。Word模板结构及表格数据如下(双括号包裹部分为待填充的变量区域):

最终生成的文档效果如下图所示。

五、代码实现步骤

第一步:导入必要的Python模块。


from docxtpl import DocxTemplate
import pandas as pd
import os

第二步:使用Python创建用于存放生成文件的文件夹。若该文件夹已存在,代码将自动跳过创建步骤以避免报错。


zpath = os.getcwd() + '\\'  #获取当前的路径
zpath = r'E:\python\tj' + '\\'
file_path = zpath + r'\通知书合集'
try:
    os.mkdir(file_path)  #创建一级目录
except:
    pass

第三步:读取CSV格式的数据文件。

将表格中的每一列数据分别赋值给一个Series类型的变量。Series可视为一种类似数组的数据结构,用于高效存储和操作数据。


data = pd.read_csv(zpath+'AdmissionList.csv', encoding='gbk')  #读取csv里的目标数据
name = data["姓名"].str.rstrip()  # str.rstrip()用于去掉空白
academy = data["学院"].str.rstrip()
major = data["专业"].str.rstrip()
begin_date = data["开始时间"].str.rstrip()
end_date = data["结束时间"].str.rstrip()

第四步:将读取的数据写入Word模板。

遍历数据表的每一行,将当前行的数据封装为字典并存入列表,以便后续渲染。


num = data.shape[0]   # 获取数据行数
for i in range(num):
    context = {
       "姓名": name[i],
       "学院": academy[i],
       "专业": major[i],
       "开始时间": begin_date[i],
       "结束时间": end_date[i]
}

加载预设的Word模板文件。


tpl = DocxTemplate(zpath+'入学通知书.docx')

执行渲染操作,将上下文数据(context)填充至Word模板的指定位置。


tpl.render(context)#渲染替换

保存生成的文件,文件名格式为“{姓名}的入学通知书.docx”。


tpl.save(file_path+r"\{}的入学通知书.docx".format(姓名[i]))

上述流程需重复执行num次(num为数据表的总行数)。执行完毕后,可在指定的file_path路径下找到所有生成的文档。

六、常见问题与排查

  1. 1. 文件名乱码:尝试将文件编码方式更改为gbk。
  2. 2. 权限错误:通常是因为源数据文件正被其他程序占用,关闭该文件即可解决。
  3. 3. 生成文档行数异常:检查代码中str.rstrip()的用法,建议明确指定为str.rstrip('\n')以去除换行符。
  4. 4. 仅生成单一文档:确保每次渲染前都重新加载模板,避免复用已修改的模板对象。

七、总结与心得

通过本次实践,我们成功实现了基于模板批量生成含指定数据Word文档的功能。初看代码时,对从CSV读取的数据类型存在疑惑,经打印输出确认,该数据为Pandas库中的Series类型。查阅资料可知,Series类似于一维数组,能够存储任意数据类型。在代码运行过程中,还遇到了多种未曾预见的错误,通过逐一排查均得以解决。

本文介绍了利用Python自动化批量生成含指定数据Word文档的方法。如需了解更多相关内容,欢迎搜索本站过往文章或继续阅读后续系列教程,感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表