Python Word生成员工简历批量版:从Excel批量出简历
用python-docx根据Excel里的员工信息批量生成个性化Word简历,自动填充姓名、岗位、经历、技能,HR一次导出上百份。
场景痛点
HR手里一份Excel员工花名册,要给每个员工出一份标准简历Word,用于内部晋升评审或对外推荐。手动一个个复制粘贴,几十个人就大半天,格式还容易不一致。用Python读Excel,按行循环套简历模板,自动填字段,一次性导出全部Word。
用到的库
pip install python-docx openpyxl pandas
完整代码
# -*- coding: utf-8 -*-
"""
从 Excel 读取员工信息,批量生成 Word 简历
"""
from pathlib import Path
import pandas as pd
from docx import Document
from docx.shared import Pt, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
def build_resume(row: dict, output_path: Path):
"""根据一行员工数据生成一份简历"""
doc = Document()
# 页边距
for section in doc.sections:
section.top_margin = Cm(2)
section.bottom_margin = Cm(2)
section.left_margin = Cm(2.5)
section.right_margin = Cm(2.5)
# 姓名(大标题居中)
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title.add_run(row["姓名"])
run.font.size = Pt(28)
run.font.bold = True
run.font.color.rgb = RGBColor(0x1F, 0x3A, 0x5F)
# 求职意向
sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
sub_run = sub.add_run(f"求职意向:{row['岗位']} | 期望薪资:{row['期望薪资']}")
sub_run.font.size = Pt(12)
sub_run.font.color.rgb = RGBColor(0x55, 0x55, 0x55)
doc.add_paragraph() # 空行
# 基本信息块
doc.add_heading("基本信息", level=2)
info_table = doc.add_table(rows=4, cols=2)
info_table.style = "Light Grid Accent 1"
info_data = [
("性别 / 年龄", f"{row['性别']} / {row['年龄']}岁"),
("学历", row["学历"]),
("工作年限", f"{row['工作年限']}年"),
("联系方式", f"{row['电话']} {row['邮箱']}"),
]
for i, (k, v) in enumerate(info_data):
info_table.cell(i, 0).text = k
info_table.cell(i, 1).text = v
# 工作经历
doc.add_heading("工作经历", level=2)
for exp in str(row["工作经历"]).split(";"):
exp = exp.strip()
if exp:
doc.add_paragraph(exp, style="List Bullet")
# 教育背景
doc.add_heading("教育背景", level=2)
doc.add_paragraph(str(row["教育背景"]))
# 技能特长
doc.add_heading("技能特长", level=2)
for skill in str(row["技能"]).split("、"):
skill = skill.strip()
if skill:
doc.add_paragraph(skill, style="List Bullet")
doc.save(str(output_path))
def batch_generate(excel_path, output_dir):
df = pd.read_excel(excel_path)
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
print(f"共 {len(df)} 名员工待生成简历")
for _, row in df.iterrows():
row_dict = row.to_dict()
name = str(row_dict.get("姓名", "未命名")).strip()
out = output_dir / f"简历_{name}.docx"
try:
build_resume(row_dict, out)
print(f"✓ {name} -> {out.name}")
except Exception as e:
print(f"✗ {name} 失败:{e}")
if __name__ == "__main__":
# 先造一份演示用的 Excel 数据(实际使用时换成你自己的花名册)
demo_df = pd.DataFrame([
{"姓名": "张三", "性别": "男", "年龄": 29, "学历": "本科",
"工作年限": 6, "岗位": "Python开发工程师", "期望薪资": "25K",
"电话": "13800001111", "邮箱": "zhangsan@example.com",
"工作经历": "2019-2022 某科技公司 后端开发;2022-至今 某互联网公司 技术骨干",
"教育背景": "2011-2015 西安交通大学 计算机科学与技术 本科",
"技能": "Python、Django、MySQL、Redis、Docker"},
{"姓名": "李四", "性别": "女", "年龄": 27, "学历": "硕士",
"工作年限": 4, "岗位": "数据分析师", "期望薪资": "20K",
"电话": "13800002222", "邮箱": "lisi@example.com",
"工作经历": "2021-至今 某电商公司 数据分析",
"教育背景": "2018-2021 西北大学 统计学 硕士",
"技能": "SQL、Python、Tableau、Excel、统计建模"},
])
demo_df.to_excel("./employees_demo.xlsx", index=False)
batch_generate(
excel_path="./employees_demo.xlsx",
output_dir="./resumes",
)
代码讲解
build_resume() 接收一个字典(一行Excel数据),用python-docx从头搭一份简历:居中大标题、灰色副标题、二级标题、表格、项目符号列表。字体字号颜色用 Pt、RGBColor 控制,页边距用 Cm 控制。
batch_generate() 用 pandas.read_excel 读花名册,逐行 iterrows() 调用 build_resume(),输出文件名用"简历_姓名.docx"。
演示代码里先造了一份 employees_demo.xlsx,实际使用时把这个Excel替换成真实花名册,列名对齐代码里的key即可。
运行结果
resumes 目录里出现 简历_张三.docx、简历_李四.docx。打开看,姓名、岗位、基本信息表、工作经历、教育背景、技能列表都自动填好了,格式统一。控制台打印每个文件生成成功或失败原因。
注意事项
- 列名必须和代码里的key完全一致("姓名""岗位"等),否则会KeyError。建议先打印
df.columns确认。 - 简历样式从零写比较死板,更实用的做法是预先在Word里做好一份模板(占位符用
{{姓名}}这种),然后用"模板渲染"方式填充。 - 工作经历、技能这种长文本建议在Excel里用分号或顿号分隔,代码里 split 成列表,自动变成项目符号。
- 同名员工会覆盖文件,文件名前加身份证号或工号更安全。

更新时间:2026-09-14 21:49:03
下一篇: