Day24:Word批量生成神器!一分钟生成全班30张奖状/通知书
每年期末写评语写到手抽筋?Python让你一键生成全班奖状、通知书、成绩单!
一、先看这个真实场景
刘老师每年期末都要干这些事:
-
全班30个学生,每人要写一张“三好学生奖状” -
还要写“期末成绩通知书”,贴上成绩、写评语 -
优秀学生还要发“喜报”,让家长脸上有光
以前他:
-
打开Word → 复制粘贴“三好学生”模板 ✓ -
把“张三”改成“李四” ✓ -
打印一张 ✓ -
再打开Word → 再改名字 → 再打印 ✓
30个学生,30次重复,一上午没了!
手都酸了,还容易把“李四”写成“张三”……
二、Python的“Word工厂”魔法
今天教你用Python批量生成Word文档,5行核心代码搞定上面所有事:
from docxtpl import DocxTemplateimport pandas as pd# 1. 准备数据(从Excel读学生名单)df = pd.read_excel('学生名单.xlsx')# 2. 加载Word模板模板 = DocxTemplate('奖状模板.docx')# 3. 批量生成for index, row in df.iterrows(): 模板.render({'姓名': row['姓名'],'奖项': '三好学生','日期': '2026年1月' }) 模板.save(f'奖状_{row["姓名"]}.docx')print(f'✅ 已生成 {len(df)} 张奖状!')
看懂了吗?
-
DocxTemplate:加载一个带占位符的Word模板(比如 {{姓名}}) -
.render():用真实数据替换占位符 -
.save():另存为新文件
以后每年期末,跑一遍代码,30张奖状 3秒搞定!
三、分解“魔法”:每步在干什么?
3.1 第一步:安装需要的库
pip install docxtpl pandas openpyxl
-
docxtpl:基于python-docx,支持模板变量替换 -
pandas:读Excel数据 -
openpyxl:pandas读Excel需要
3.2 第二步:制作Word模板
打开Word,新建一个文档,像这样写:

-
关键:用 {{变量名}} 占位,渲染时会自动替换。 -
保存为 奖状模板.docx(普通Word文档就行)。
3.3 第三步:准备数据Excel
建一个 学生名单.xlsx,里面有两列:姓名、奖项(可选)。比如:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
3.4 第四步:批量生成
from docxtpl import DocxTemplateimport pandas as pddf = pd.read_excel('学生名单.xlsx')模板 = DocxTemplate('奖状模板.docx')for index, row in df.iterrows(): 模板.render({'姓名': row['姓名'],'奖项': row['奖项'],'日期': '2026年1月15日' }) 模板.save(f'奖状_{row["姓名"]}.docx')print(f'已生成:奖状_{row["姓名"]}.docx')
循环里每次 render 会替换占位符,生成一个新的Word文件。
四、自己动手试试!
4.1 第一步:创建测试文件
在桌面上新建一个文件夹 Word批量生成,里面放:
-
学生名单.xlsx
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
-
奖状模板.docx

4.2 第二步:运行代码
from docxtpl import DocxTemplateimport pandas as pdimport os# 设置工作目录(如果你的文件不在当前目录)os.chdir(r'C:\Users\你的用户名\Desktop\Word批量生成')df = pd.read_excel('学生名单.xlsx')模板 = DocxTemplate('奖状模板.docx')for index, row in df.iterrows(): 模板.render({'姓名': row['姓名'],'奖项': row['奖项'],'日期': '2026年1月15日' }) 模板.save(f'奖状_{row["姓名"]}.docx')print(f'已生成:奖状_{row["姓名"]}.docx')print('✅ 全部生成完成!')
打开文件夹,看看是不是多了三个Word文件?每个都填好了对应的名字和奖项!
五、办公实战1:批量生成成绩通知书
更复杂一点的场景:要发成绩单,包含各科分数和评语。
5.1 模板制作(通知书模板.docx)

5.2 数据准备(成绩表.xlsx)
|
|
|
|
|
|
|
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.3 批量生成代码
from docxtpl import DocxTemplateimport pandas as pddf = pd.read_excel('成绩表.xlsx')模板 = DocxTemplate('通知书模板.docx')for index, row in df.iterrows(): 模板.render({'学生姓名': row['姓名'],'语文': row['语文'],'数学': row['数学'],'英语': row['英语'],'总分': row['总分'],'评语': row['评语'],'日期': '2026年1月20日' }) 模板.save(f'通知书_{row["姓名"]}.docx')print(f'已生成:通知书_{row["姓名"]}.docx')print('✅ 成绩通知书生成完成!')
六、办公实战2:批量生成奖状(带照片!)
有些学校奖状要贴照片,咱们可以结合上一期的图片处理,把学生照片也插入Word。
6.1 准备照片
每个学生一个照片文件,命名为 张三.jpg、李四.jpg 放在 照片 文件夹。
6.2 模板制作(带照片的奖状模板.docx)
在Word里插入一个图片占位符,然后右键图片 → 查看图片格式,记下图片的“书签”名称(比如 pic)。然后用 {{ 图片路径 }} 动态插入。
更简单的做法:用 docxtpl 的 InlineImage 功能:
from docxtpl import DocxTemplate, InlineImagefrom docx.shared import Mmimport pandas as pd模板 = DocxTemplate('奖状带照片模板.docx')for index, row in df.iterrows(): 照片路径 = f'照片/{row["姓名"]}.jpg'# 如果照片存在 try: 照片 = InlineImage(模板, 照片路径, width=Mm(30)) # 宽度30mm except: 照片 = ''# 照片不存在就留空 模板.render({'姓名': row['姓名'],'奖项': row['奖项'],'照片': 照片,'日期': '2026年1月' }) 模板.save(f'奖状_{row["姓名"]}.docx')
但是注意:这种方法生成的Word里,照片是嵌入的,文件会比较大。如果不需要在Word里编辑,也可以先生成Word,然后用上一期的方法转成PDF再合并。
七、进阶技巧:批量转PDF并合并
生成一堆Word后,如果想合并成一个PDF打印,可以结合 docx2pdf 和 PyPDF2:
# 安装:pip install docx2pdf PyPDF2from docx2pdf import convertimport osimport PyPDF2# 把每个Word转成PDFfor 文件名 in os.listdir('.'):if 文件名.startswith('奖状_') and 文件名.endswith('.docx'): pdf名 = 文件名.replace('.docx', '.pdf') convert(文件名, pdf名)print(f'已转PDF:{pdf名}')# 合并所有PDF合并器 = PyPDF2.PdfMerger()for 文件名 in os.listdir('.'):if 文件名.endswith('.pdf') and 文件名 != '合并奖状.pdf': 合并器.append(文件名)合并器.write('合并奖状.pdf')print('✅ 所有奖状已合并为 合并奖状.pdf')
八、重点总结
✅ 核心技能
-
docxtpl – 用模板批量生成Word -
{{变量}} – Word里的占位符 -
.render() – 替换占位符 -
.save() – 另存为新文件 -
结合Excel – 用pandas读取数据
✅ 办公应用场景
-
奖状/荣誉证书 → 批量生成 -
成绩通知书 → 带表格和评语 -
家长会邀请函 → 自动填入学生姓名 -
合同/协议 → 批量生成(姓名、金额等变量)
✅ 效率对比
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
九、今日挑战:动手做!
任务1:批量生成家长会邀请函
# 数据:学生姓名、家长姓名、开会时间# 模板:尊敬的{{家长姓名}}家长:您的孩子{{学生姓名}}……请于{{时间}}参加家长会。
任务2:生成带照片的学生档案卡
# 每个学生一张Word,包含姓名、班级、照片、获奖记录
任务3:把所有生成的Word一键转成PDF并合并
# 结合今天学的docx2pdf和PyPDF2,做一个完整流程
十、明日预告
明天学终极自动化:搭建你的个人办公机器人!
-
如何用Python监控文件夹,有新文件自动处理? -
如何把多个脚本组合成一个完整系统? -
如何用GUI界面让不懂代码的同事也能用?
真正的“办公自动化大师”,从明天开始!
回复「Py-Day」获取今日挑战题解及本文完整答案
评论区作业:晒出你用Python批量生成的Word文档截图!👇
夜雨聆风
