当前位置:首页>python>Python办公自动化保姆级教程④:Word文档自动化实战,批量生成合同、填充模板、插入图文、统一格式,彻底解放文案工作

Python办公自动化保姆级教程④:Word文档自动化实战,批量生成合同、填充模板、插入图文、统一格式,彻底解放文案工作

  • 2026-09-06 20:47:47
Python办公自动化保姆级教程④:Word文档自动化实战,批量生成合同、填充模板、插入图文、统一格式,彻底解放文案工作

标签:#Python办公自动化 #Word自动化 #python-docx #批量生成合同 #文档模板填充 #办公效率工具

前言

前面三篇我们完整吃透了 Excel 全流程自动化:数据读写、合并拆分、格式美化、图表可视化,彻底搞定表格类重复工作。

职场除了表格,占比最高的就是 Word 文档工作:批量制作劳动合同、入职证明、汇报报告、通知公告、项目文档。

手动做Word文档有这些致命痛点:

❌ 百份合同仅姓名、日期、金额不同,其余内容完全一致,手动复制粘贴极度耗时

❌ 文档字体、行距、缩进不统一,批量排版需要反复调整

❌ 需要批量插入表格、图片、落款,重复机械操作极易出错

❌ 修改通用模板内容,每份文档需要逐一手动修改

本篇手把手带大家掌握 python-docx 库,零基础实现 Word 全套自动化:新建文档、文字排版、段落样式、模板批量填充、批量生成合同、插入表格图片、统一全局格式,一键生成上百份标准文档!


一、环境安装与核心概念

本次使用专属Word自动化库 python-docx,专注处理 .docx 新版文档,不支持旧版 .doc 格式。

一键安装依赖:

pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple

核心层级概念(零基础秒懂)

  • Document:整个Word文档对象(完整文件)

  • Paragraph:段落(每一段文字、空行)

  • Run:段落内文字块(单独设置字体、颜色、加粗)

  • Table:文档内表格对象


二、基础实战:新建Word、写入文字、样式排版

从零创建Word文档,实现写入标题、正文、设置字体、居中、行距、加粗变色,生成标准格式文档。

关键避坑

python-docx 默认不支持中文字体,必须通过 qn('w:eastAsia') 设置中文字体,否则中文全部错乱、样式失效。


三、核心实战一:Word模板批量填充(职场最高频)

场景:固定模板合同、证明、通知,仅替换变量信息(姓名、日期、金额、部门),批量生成百份文档。

操作步骤

1、手动制作 template.docx 模板文件,用 {{变量名}} 占位;

2、脚本读取模板,批量替换所有占位变量;

3、自动保存为独立文档,实现一键批量生成。

模板内容示例:

兹证明:{{name}},任职于{{dept}},岗位为{{job}},月薪{{salary}}元,入职日期{{date}}。该员工工作表现良好,信息真实有效,特此证明。

完整批量填充代码:

# -*- coding: utf-8 -*-"""Python办公自动化第4篇 Word自动化 完整单文件代码适配公众号全文、无BUG、可直接运行"""from docx import Documentfrom docx.shared import Pt, Cmfrom docx.oxml.ns import qnfrom docx.enum.text import WD_ALIGN_PARAGRAPHfrom docx.shared import RGBColor# ===================== 1. 基础新建Word文档(带排版样式) =====================def create_base_doc():    doc = Document()    # 全局中文字体修复    doc.styles["Normal"].font.name = "宋体"    doc.styles["Normal"]._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")    doc.styles["Normal"].font.size = Pt(12)    # 标题    p_title = doc.add_paragraph()    run_title = p_title.add_run("员工在职证明")    p_title.alignment = WD_ALIGN_PARAGRAPH.CENTER    run_title.font.name = "黑体"    run_title._element.rPr.rFonts.set(qn("w:eastAsia"), "黑体")    run_title.font.size = Pt(20)    run_title.font.bold = True    run_title.font.color.rgb = RGBColor(0, 48, 96)    # 正文    p_content = doc.add_paragraph()    content = "兹证明:张三,身份证号码:110101199901011234,于2025年03月10日正式入职我司,现任技术部Python开发工程师一职,月度税前薪资9000元。该员工在职期间工作认真、表现良好,以上信息真实有效,特此证明。"    run_content = p_content.add_run(content)    run_content.font.name = "宋体"    run_content._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")    run_content.font.size = Pt(12)    # 落款    p_foot = doc.add_paragraph()    foot_text = "XX科技有限公司\n2026年08月13日"    run_foot = p_foot.add_run(foot_text)    p_foot.alignment = WD_ALIGN_PARAGRAPH.RIGHT    doc.save("1_基础在职证明.docx")    print("✅ 基础文档生成完成")# ===================== 2. 模板批量替换生成多文件 =====================def batch_create_doc():    # 批量数据源    data_list = [        {"name":"张三","dept":"技术部","job":"Python开发工程师","salary":"9000","date":"2025-03-10"},        {"name":"李四","dept":"市场部","job":"运营专员","salary":"7500","date":"2025-04-02"},        {"name":"王五","dept":"人事部","job":"人事专员","salary":"7000","date":"2025-05-06"},    ]    for data in data_list:        doc = Document("template.docx")        for para in doc.paragraphs:            para.text = para.text.replace("{{name}}",data["name"])            para.text = para.text.replace("{{dept}}",data["dept"])            para.text = para.text.replace("{{job}}",data["job"])            para.text = para.text.replace("{{salary}}",data["salary"])            para.text = para.text.replace("{{date}}",data["date"])        doc.save(f"2_{data['name']}_在职证明.docx")        print(f"✅ {data['name']} 文档生成完成")# ===================== 3. 自动生成Word数据表格 =====================def create_table_doc():    doc = Document()    doc.styles["Normal"].font.name = "宋体"    doc.styles["Normal"]._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")    doc.styles["Normal"].font.size = Pt(12)    # 标题    title = doc.add_paragraph()    run = title.add_run("员工信息统计表")    run.font.name = "黑体"    run._element.rPr.rFonts.set(qn("w:eastAsia"), "黑体")    run.font.size = Pt(16)    run.font.bold = True    # 创建表格    table = doc.add_table(rows=5, cols=4)    headers = ["姓名","部门","岗位","薪资"]    for i,h in enumerate(headers):        table.cell(0,i).text = h    # 填充数据    rows_data = [        ["张三","技术部","开发工程师","9000"],        ["李四","市场部","运营专员","7500"],        ["王五","人事部","人事专员","7000"],        ["赵六","财务部","会计","7800"],    ]    for idx,row in enumerate(rows_data,1):        for col,val in enumerate(row):            table.cell(idx,col).text = val    doc.save("3_自动表格文档.docx")    print("✅ 表格文档生成完成")# ===================== 4. 统一文档格式 =====================def format_doc():    doc = Document("1_基础在职证明.docx")    for p in doc.paragraphs:        for run in p.runs:            run.font.name = "宋体"            run._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")            run.font.size = Pt(12)    doc.save("4_统一格式文档.docx")    print("✅ 格式统一完成")# ===================== 5. 完整综合报告 =====================def full_report():    doc = Document()    doc.styles["Normal"].font.name = "宋体"    doc.styles["Normal"]._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")    doc.styles["Normal"].font.size = Pt(12)    # 主标题    t = doc.add_paragraph()    tr = t.add_run("公司员工数据统计报告")    t.alignment = WD_ALIGN_PARAGRAPH.CENTER    tr.font.name = "黑体"    tr._element.rPr.rFonts.set(qn("w:eastAsia"), "黑体")    tr.font.size = Pt(20)    tr.font.bold = True    # 说明    doc.add_paragraph("本报告由Python自动化生成,用于公司员工信息统计归档,数据真实有效、格式统一规范。")    # 表格    table = doc.add_table(rows=5, cols=4)    heads = ["姓名","部门","岗位","月薪"]    for i,h in enumerate(heads):        table.cell(0,i).text = h    table.cell(1,0).text = "张三"    table.cell(1,1).text = "技术部"    table.cell(1,2).text = "开发工程师"    table.cell(1,3).text = "9000"    table.cell(2,0).text = "李四"    table.cell(2,1).text = "市场部"    table.cell(2,2).text = "运营专员"    table.cell(2,3).text = "7500"    table.cell(3,0).text = "王五"    table.cell(3,1).text = "人事部"    table.cell(3,2).text = "人事专员"    table.cell(3,3).text = "7000"    # 落款    foot = doc.add_paragraph()    foot_run = foot.add_run("统计部门:行政人事部\n统计日期:2026年08月13日")    foot.alignment = WD_ALIGN_PARAGRAPH.RIGHT    doc.save("5_全自动完整报告.docx")    print("✅ 完整报告生成完成")if __name__ == "__main__":    create_base_doc()    create_table_doc()    format_doc()    full_report()    # batch_create_doc()  # 需先创建下面的 template.docx 再打开    print("\n🎉 第四篇 Word 全部功能执行完毕!")

企业级优势:模板只需做一次,后续无限批量生成,格式100%统一,零人工错误。


四、核心实战二:Word中插入表格、自动填充数据

自动在文档中插入表格、批量写入数据、设置表格样式,自动生成员工信息表、业绩统计表、台账文档。


五、核心实战三:Word插入图片、自适应排版

自动在报告、方案中插入图片,设置图片宽度、居中显示,适配正式汇报文档排版。

实操技巧:使用 Cm() 厘米单位精准控制图片尺寸,避免图片过大溢出页面、过小排版难看。


六、进阶实战:批量修改已有文档格式

针对已有大量Word文档,批量统一字体、字号、行距、缩进,一键规整所有文档格式。


七、本篇高频踩坑避坑清单

❌中文样式不生效、字体错乱:未添加 eastAsia 中文字体配置,所有文档必须配置默认中文字体

❌ 旧版.doc文档无法打开:python-docx 仅支持 .docx 格式,旧文档需手动另存为新版格式

❌ 模板替换不生效:占位符空格必须完全一致,建议统一使用 {{变量}} 无空格格式

❌ 图片尺寸溢出页面:必须手动设置宽度,不要使用默认原生尺寸

❌ 批量生成文档覆盖文件:保存文件名必须差异化(姓名/日期命名),避免覆盖


八、职场落地万能场景

✅ 人事办公:批量生成劳动合同、入职证明、离职证明、薪资单

✅ 行政办公:批量生成通知、公告、红头文件模板填充

✅ 财务办公:批量生成报销说明、财务报表说明、对账文档

✅ 项目办公:批量生成项目周报、月报、方案文档,统一排版格式



文末结语

Word自动化是职场提效神器,尤其适合大量同质化文档场景。

学会模板批量填充后,原本几小时的文档制作工作,现在一秒生成百份文档,格式标准、零失误、零重复劳动。

结合前面Excel数据处理能力,你已经可以实现:Excel读取数据 → 自动填充Word模板 → 批量导出正式文档,完成完整办公闭环!

最新文章

随机文章