
👉 项目官网:https://www.python-office.com/ 👈

大家好,这里是程序员晚枫,正在all in AI编程实战。
每年要给员工发证书、给客户发合同,手动填写太累?
今天教你怎么用 python-office 批量生成 Word 文档。
1、基础:批量生成证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import office
employees = [ {'name': '张三', 'dept': '技术部'}, {'name': '李四', 'dept': '市场部'}, {'name': '王五', 'dept': '财务部'}, ]
for emp in employees: filename = f"证书_{emp['name']}.docx" content = f''' 优秀员工证书
兹证明 {emp['name']} 同志,在{emp['dept']} 2024年度工作中表现优异,特发此证,以资鼓励。
颁发单位:XXX公司 颁发日期:2024年12月31日 ''' office.word.write(path=filename, content=content) print(f'已生成: {filename}')
print(f'共生成 {len(employees)} 份证书!')
|
2、进阶:使用模板批量生成
先准备一个 Word 模板 合同模板.docx,里面写好格式,只留占位符:
1 2 3 4 5
| 合同编号:{编号} 甲方:{甲方} 乙方:{乙方} 金额:{金额}元 日期:{日期}
|
然后用代码替换:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import office import os
def batch_generate_contracts(template, data_list): """批量生成合同""" for data in data_list: content = office.word.read(path=template) for key, value in data.items(): content = content.replace(f'{{{key}}}', str(value)) filename = f"合同_{data['甲方']}.docx" office.word.write(path=filename, content=content) print(f'已生成: {filename}')
data_list = [ {'编号': 'HT001', '甲方': '阿里巴巴', '乙方': '我们公司', '金额': '100000', '日期': '2024-01-15'}, {'编号': 'HT002', '甲方': '腾讯', '乙方': '我们公司', '金额': '80000', '日期': '2024-02-20'}, ]
batch_generate_contracts('合同模板.docx', data_list)
|
3、实战案例:批量生成录取通知书
新生录取通知书一键生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import office from datetime import date
def generate_admission_letters(excel_file): """从Excel读取新生信息,批量生成录取通知书""" df = office.excel.read(path=excel_file) today = date.today().strftime('%Y年%m月%d日') for idx, row in df.iterrows(): name = row['姓名'] major = row['专业'] student_id = row['学号'] content = f''' 录取通知书
亲爱的 {name} 同学:
经学校招生委员会审核,您已被正式录取为我校 {major} 专业2024级新生。
学号:{student_id} 报到时间:2024年9月1日-2日 报到地点:学校体育馆
特此通知。
XX大学招生办公室 {today} ''' filename = f'录取通知书_{name}.docx' office.word.write(path=filename, content=content) print(f'已生成: {filename}') print(f'共生成 {len(df)} 份录取通知书!')
generate_admission_letters('新生名单.xlsx')
|
4、实战案例:批量生成工资条
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import office
def generate_payroll(excel_file): """批量生成工资条""" df = office.excel.read(path=excel_file) for idx, row in df.iterrows(): name = row['姓名'] base = row['基本工资'] bonus = row['奖金'] total = base + bonus content = f''' 工资条
姓名:{name} 基本工资:{base:.2f}元 奖金:{bonus:.2f}元 扣税:{total * 0.1:.2f}元 实发工资:{total * 0.9:.2f}元
财务部 ''' filename = f'工资条_{name}.docx' office.word.write(path=filename, content=content) print(f'已生成 {len(df)} 份工资条!')
generate_payroll('工资表.xlsx')
|
5、常见问题
Q:模板里有表格,替换会乱?
A:建议模板不要用复杂表格,用简单的占位符即可。
Q:想生成PDF格式?
A:生成Word后,用 office.word.docx2pdf() 转成PDF。
Q:文件名太长?
A:可以用编号代替姓名:
1
| filename = f"证书_{idx+1:03d}.docx"
|
6、下讲预告
学会了Word批量生成,下一讲我们学 PDF高级:加水印、加密、拆分。
敬请期待!
有问题欢迎加微信 python-office 进群交流~
程序员晚枫专注AI编程培训,小白看完他和图灵社区合作的教程《30讲 · AI编程训练营》就能上手做AI项目。
🎓 AI 编程实战课程
想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!