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

github star

大家好,这里是程序员晚枫,正在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"  # 001, 002, 003...

6、下讲预告

学会了Word批量生成,下一讲我们学 PDF高级:加水印、加密、拆分

敬请期待!


有问题欢迎加微信 python-office 进群交流~

程序员晚枫专注AI编程培训,小白看完他和图灵社区合作的教程《30讲 · AI编程训练营》就能上手做AI项目。

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!