首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 办公实战:用 python-docx 自动生成 Word 文档

Python 办公实战:用 python-docx 自动生成 Word 文档

原创
作者头像
用户11690571
发布于 2025-06-18 23:15:02
发布于 2025-06-18 23:15:02
70900
代码可运行
举报
运行总次数:0
代码可运行

一、为什么使用 Python 操作 Word 文档?

Word 文档广泛用于:

  • 合同、协议、通知、报告编写
  • 发票、报价单、工资单自动生成
  • 项目分析报告、数据插入与格式控制

如果每天都要复制粘贴几十份 Word,仅改几个数字/姓名,那就很适合用 Python 来替代人工操作,实现“批量生成”、“模板填充”、“一键输出”。


二、准备工作与库介绍

1. 安装核心库 python-docx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash复制编辑pip install python-docx

python-docx 是专门用于操作 Word 文档(.docx 格式)的第三方库。

支持功能包括:

  • 新建 Word 文档并写入文字
  • 设置段落、字体、样式
  • 插入图片、表格、页眉页脚
  • 替换占位符,实现模板填充

三、创建一个简单的 Word 文档

1. 创建与保存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑from docx import Document

doc = Document()
doc.add_heading('自动生成文档示例', 0)
doc.add_paragraph('这是使用 python-docx 自动创建的第一段内容。')
doc.save('demo.docx')

📄 生成的 Word 文件将包含标题和一段文字。


四、添加段落、标题、样式与格式

1. 添加多级标题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑doc.add_heading('一级标题', level=1)
doc.add_heading('二级标题', level=2)
doc.add_heading('三级标题', level=3)

2. 设置段落对齐、缩进、加粗

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

para = doc.add_paragraph('设置格式的段落')
run = para.runs[0]
run.bold = True
run.font.size = Pt(14)

para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

📷 效果图: 一段加粗、14 号字体、居中的文字。


五、插入图片与控制尺寸

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑doc.add_picture('logo.png', width=Pt(200))
  • 支持 .png, .jpg, .bmp 等格式
  • 可以控制 widthheight 精确设置图像大小

六、插入表格(适合工资单、清单类)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'

hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'
hdr_cells[1].text = '部门'
hdr_cells[2].text = '工资'

# 添加数据
data = [("张三", "财务部", "8000"), ("李四", "人事部", "7500")]
for name, dept, salary in data:
    row = table.add_row().cells
    row[0].text = name
    row[1].text = dept
    row[2].text = salary

📋 生成表格内容如:

姓名

部门

工资

张三

财务部

8000

李四

人事部

7500


七、模板填充实战:自动生成合同文档

1. 创建 Word 模板文件(contract_template.docx

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash复制编辑合同编号:{{contract_no}}
甲方姓名:{{party_a}}
乙方姓名:{{party_b}}
合同金额:{{amount}} 元
签署日期:{{date}}

2. 读取并替换占位符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑from docx import Document

def fill_template(template_path, output_path, context):
    doc = Document(template_path)
    for para in doc.paragraphs:
        for key, val in context.items():
            if f'{{{{{key}}}}}' in para.text:
                para.text = para.text.replace(f'{{{{{key}}}}}', str(val))
    doc.save(output_path)

3. 使用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑context = {
    "contract_no": "HT2024060101",
    "party_a": "上海科技有限公司",
    "party_b": "李华",
    "amount": 35000,
    "date": "2024-06-01"
}

fill_template("contract_template.docx", "contract_output.docx", context)

📄 自动生成后的 Word 文档将完整填入字段。


八、批量生成多个文档(Excel 驱动)

假设你有如下 Excel 表格(data.xlsx):

编号

姓名

部门

金额

20240601A

张三

财务

8500

20240601B

李四

技术

9500

1. 用 Pandas 读取数据并循环生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑import pandas as pd

df = pd.read_excel('data.xlsx')

for i, row in df.iterrows():
    context = {
        "contract_no": row['编号'],
        "party_a": "XX科技公司",
        "party_b": row['姓名'],
        "amount": row['金额'],
        "date": "2024-06-01"
    }
    filename = f"合同_{row['姓名']}.docx"
    fill_template("contract_template.docx", filename, context)

📁 批量生成多个 Word 合同(每人一份),适用于工资条、评语、证明等大量文本任务。


九、加入页眉页脚与页码

页眉与页脚较复杂,需要访问文档 sections

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑section = doc.sections[0]
header = section.header
footer = section.footer

header.paragraphs[0].text = "XX公司 Confidential"
footer.paragraphs[0].text = "第 { PAGE } 页"

十、将 Word 转换为 PDF(扩展功能)

需要借助 Word COM(仅 Windows)或 docx2pdf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash复制编辑pip install docx2pdf
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑from docx2pdf import convert
convert("合同_张三.docx")

生成 合同_张三.pdf,适合正式发送或归档。


十一、打包成自动化 GUI 工具

你可以结合 Tkinter 实现文档生成 GUI 程序:

  • 输入姓名/金额等 → 填入模板 → 一键生成
  • 可选输出路径、导出 PDF

结合 pyinstaller 打包为桌面工具供他人使用。


十二、常见问题 FAQ

问题

解决方法

替换占位符后样式丢失

替换 run 内容更复杂,可用 python-docx-template

表格列宽不一致

使用 table.columns[x].width = value 手动设置

不支持 doc 格式

python-docx 仅支持 .docx

无法插入页码

页码只能用 Word 模板提前插入域字段 { PAGE }


十三、推荐拓展:使用 docxtpl 实现复杂模板

相比手动替换字符串,更推荐使用 docxtpl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash复制编辑pip install docxtpl

配合 Jinja2 模板语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python复制编辑from docxtpl import DocxTemplate

tpl = DocxTemplate("contract_template.docx")
tpl.render(context)
tpl.save("filled.docx")

模板内写法类似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
复制编辑甲方:{{ party_a }}
乙方:{{ party_b }}

十四、总结与应用方向

✅ 本文你学到了:

  • 创建 Word 文档、标题、段落、表格、图像等基本操作
  • 替换内容实现模板填充
  • 使用 Excel 生成批量文档
  • 生成 PDF、页码、页眉页脚处理方法

📚 应用场景举例:

场景

示例

合同自动生成

招聘合同、销售合同、项目协议

工资条批量生成

每月工资单、奖金单、部门汇总

证明/通知类文档

开会通知、成绩单、评语、奖学金文件

Word 生成报告

分析报告、季度小结、客户简报


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验