Python 作为“自动化胶水语言”,非常适合用来处理重复性高、规则明确、数据量大的工作,在涉及大量excel、word等操作的办公流程中效果还挺不错的。今天我们来看下这个任务: 根据 Excel 里的员工名单,批量生成Word 版的开工通知。整体分为以下几个环节,“模板 + 数据 = 成品”。- 模板:在 Word 里做好一个漂亮的文档,把需要变动的地方(如姓名、部门、日期)用
{{ 变量名 }} 标出来。 - 数据:Excel 里存着员工的具体信息。
- Python:读取 Excel,循环替换 Word 模板中的变量,保存为相应数量的新文件。
上面这套流程一旦跑通,还可以轻松复用到比如,每个月发工资条、每季度发绩效书等其他任务中,只需要更新一下Excel,Word文件,再适当调整python代码,上百份文档也只需几秒钟,办公效率直接爆棚!

以开工通知任务为例,具体步骤如下:
1. 准备 Excel 数据 (employees.xlsx)
创建一个 Excel 文件,第一行必须是表头(作为变量名),下面是具体数据。比如:
| | | |
| | | 2026 年 2 月 24 日 |
| | | 2026 年 2 月 24 日 |
| | | 2026 年 2 月 24 日 |
注意:表头尽量用英文或拼音(如 name, department),方便在代码中调用,避免中文表头可能出现的编码问题(虽然 pandas 支持中文,但英文更稳健)。
2. 准备 Word 模板 (template.docx)
新建一个 Word 文档,设计好你的“开工通知”格式。 在需要填入数据的地方,使用双花括号 {{ 变量名 }} 包裹,变量名必须与 Excel 表头完全一致。
Word 内容示例:
2026年开工通知书
亲爱的 {{ name }} 同事:
欢迎回到 {{ department }}! 新的一年,公司确认您的岗位为:{{ position }}。 您的正式开工日期为:{{ start_date }}。 祝您在新的一年里工作顺利!
人力资源部 2026 年 2 月
保存为 template.docx。
3. 编写 Python 脚本
新建一个 Python 文件(例如 generate_docs.py),输入以下代码:
import pandas as pdfrom docxtpl import DocxTemplateimport os# ================= 配置区域 =================# 输入文件路径excel_file = 'employees.xlsx'template_file = 'template.docx'# 输出文件夹(如果不存在会自动创建)output_folder = 'generated_docs'# ===========================================def main(): # 1. 检查输出文件夹,不存在则创建 if not os.path.exists(output_folder): os.makedirs(output_folder) print(f"已创建输出文件夹:{output_folder}") # 2. 读取 Excel 数据 try: # dtype=str 确保所有数据都按字符串处理,防止数字前的 0 丢失或日期格式错误 df = pd.read_excel(excel_file, dtype=str) # 填充空值为空字符串,避免报错 df = df.fillna('') print(f"成功读取 {len(df)} 条员工数据。") except FileNotFoundError: print(f"错误:找不到文件 {excel_file},请检查路径。") return except Exception as e: print(f"读取 Excel 出错:{e}") return # 3. 加载 Word 模板 try: tpl = DocxTemplate(template_file) except FileNotFoundError: print(f"错误:找不到模板文件 {template_file},请检查路径。") return # 4. 循环处理每一行数据 success_count = 0 for index, row in df.iterrows(): # 将当前行转换为字典,key 是列名 (变量名), value 是单元格内容 context = row.to_dict() # 可选:打印进度 # print(f"正在生成:{context.get('name', '未知')}...") # 渲染模板 tpl.render(context) # 构造文件名:例如 "开工通知_张三.docx" # 这里假设 Excel 里有 'name' 列,如果没有请修改 key name = context.get('name', f'员工_{index+1}') # 清理文件名中可能存在的非法字符 (如 / \ : * ? " < > |) safe_name = "".join([c for c in name if c not in r'\/:*?"<>|']) output_filename = f"开工通知_{safe_name}.docx" output_path = os.path.join(output_folder, output_filename) # 保存新文件 tpl.save(output_path) success_count += 1 print("-" * 30) print(f"✅ 完成!共成功生成 {success_count} 份文档。") print(f"📂 文件已保存至:{os.path.abspath(output_folder)} 文件夹")if __name__ == "__main__": main()
- 确保
employees.xlsx 和 template.docx 与Python脚本在同一目录下(或者在代码中修改为绝对路径)。 - 运行脚本:
python generate_docs.py。 - 结果:你会看到一个名为
generated_docs 的新文件夹,里面整齐地躺着多份已经填好名字的 Word 文档。