当前位置:首页>python>Python与办公自动化--批量生成报告/通知

Python与办公自动化--批量生成报告/通知

  • 2026-09-08 20:22:51
Python与办公自动化--批量生成报告/通知
Python 作为“自动化胶水语言”,非常适合用来处理重复性高、规则明确、数据量大的工作,在涉及大量excel、word等操作的办公流程中效果还挺不错的。
今天我们来看下这个任务: 根据 Excel 里的员工名单,批量生成Word 版的开工通知。整体分为以下几个环节,“模板 + 数据 = 成品”。
  1. 模板:在 Word 里做好一个漂亮的文档,把需要变动的地方(如姓名、部门、日期)用 {{ 变量名 }} 标出来。
  2. 数据:Excel 里存着员工的具体信息。
  3. Python:读取 Excel,循环替换 Word 模板中的变量,保存为相应数量的新文件。

上面这套流程一旦跑通,还可以轻松复用到比如,每个月发工资条、每季度发绩效书等其他任务中,只需要更新一下Excel,Word文件,再适当调整python代码,上百份文档也只需几秒钟,办公效率直接爆棚!

以开工通知任务为例,具体步骤如下:

1. 准备 Excel 数据 (employees.xlsx)

创建一个 Excel 文件,第一行必须是表头(作为变量名),下面是具体数据。比如:

name
department
position
start_date
张三
技术部
高级工程师

2026 年 2 月 24 日

李四
市场部
销售经理

2026 年 2 月 24 日

王五
人事部
HRBP

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()
4. 最终运行
  1. 确保 employees.xlsx 和 template.docx 与Python脚本在同一目录下(或者在代码中修改为绝对路径)。
  2. 运行脚本:python generate_docs.py。
  3. 结果:你会看到一个名为 generated_docs 的新文件夹,里面整齐地躺着多份已经填好名字的 Word 文档。

过往文章/合集

合集

文章

Python编程小技巧

Python编程小技巧--用Python查询天气

Python编程小技巧--‌自制简易系统监控

Python--数据/图像可视化

Python编程小技巧--雷达图

Python编程小技巧--新年倒计时小工具2.0版

Python编程基础算法

Python编程基础算法--斐波那契数列的矩阵算法

Python编程基础算法--LeetCode编辑距离问题

细数那些经典教材

细数那些经典教材--算法与数据结构

细数那些经典教材--编程竞赛

Python库巡礼

Python库巡礼--Polars

Python库巡礼--Dask

Python与数学之美

Python与数学之美--黄金螺线

Python与数学之美--李萨如曲线(Lissajous)

最新文章

随机文章