乐于分享
好东西不私藏

Day24:Word批量生成神器!一分钟生成全班30张奖状/通知书

Day24:Word批量生成神器!一分钟生成全班30张奖状/通知书

每年期末写评语写到手抽筋?Python让你一键生成全班奖状、通知书、成绩单!

一、先看这个真实场景

刘老师每年期末都要干这些事:

  1. 全班30个学生,每人要写一张“三好学生奖状”
  2. 还要写“期末成绩通知书”,贴上成绩、写评语
  3. 优秀学生还要发“喜报”,让家长脸上有光

以前他:

  1. 打开Word → 复制粘贴“三好学生”模板 ✓
  2. 把“张三”改成“李四” ✓
  3. 打印一张 ✓
  4. 再打开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批量生成,里面放:

  1. 学生名单.xlsx
姓名
奖项
张三
三好学生
李四
优秀班干部
王五
进步之星
  1. 奖状模板.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)

姓名
语文
数学
英语
总分
评语
张三
85
92
88
265
学习认真,继续保持
李四
78
88
80
246
有进步,需加强语文
王五
92
95
90
277
成绩优秀,值得表扬

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')

八、重点总结

✅ 核心技能

  1. docxtpl – 用模板批量生成Word
  2. {{变量}} – Word里的占位符
  3. .render() – 替换占位符
  4. .save() – 另存为新文件
  5. 结合Excel – 用pandas读取数据

✅ 办公应用场景

  1. 奖状/荣誉证书 → 批量生成
  2. 成绩通知书 → 带表格和评语
  3. 家长会邀请函 → 自动填入学生姓名
  4. 合同/协议 → 批量生成(姓名、金额等变量)

✅ 效率对比

任务
传统操作
Python代码
30张奖状
改名字30次+打印30次
3秒
成绩通知书
复制粘贴+手写评语
一键生成
转PDF合并
逐个另存为
自动完成

九、今日挑战:动手做!

任务1:批量生成家长会邀请函

# 数据:学生姓名、家长姓名、开会时间# 模板:尊敬的{{家长姓名}}家长:您的孩子{{学生姓名}}……请于{{时间}}参加家长会。

任务2:生成带照片的学生档案卡

# 每个学生一张Word,包含姓名、班级、照片、获奖记录

任务3:把所有生成的Word一键转成PDF并合并

# 结合今天学的docx2pdf和PyPDF2,做一个完整流程

十、明日预告

明天学终极自动化:搭建你的个人办公机器人!

  • 如何用Python监控文件夹,有新文件自动处理?
  • 如何把多个脚本组合成一个完整系统?
  • 如何用GUI界面让不懂代码的同事也能用?

真正的“办公自动化大师”,从明天开始!


回复「Py-Day」获取今日挑战题解及本文完整答案 

评论区作业:晒出你用Python批量生成的Word文档截图!👇

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Day24:Word批量生成神器!一分钟生成全班30张奖状/通知书

评论 抢沙发

7 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮