Word 文档广泛用于:
如果每天都要复制粘贴几十份 Word,仅改几个数字/姓名,那就很适合用 Python 来替代人工操作,实现“批量生成”、“模板填充”、“一键输出”。
python-docx
bash复制编辑pip install python-docx
python-docx
是专门用于操作 Word 文档(.docx 格式)的第三方库。
支持功能包括:
python复制编辑from docx import Document
doc = Document()
doc.add_heading('自动生成文档示例', 0)
doc.add_paragraph('这是使用 python-docx 自动创建的第一段内容。')
doc.save('demo.docx')
📄 生成的 Word 文件将包含标题和一段文字。
python复制编辑doc.add_heading('一级标题', level=1)
doc.add_heading('二级标题', level=2)
doc.add_heading('三级标题', level=3)
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 号字体、居中的文字。
python复制编辑doc.add_picture('logo.png', width=Pt(200))
.png
, .jpg
, .bmp
等格式
width
和 height
精确设置图像大小
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 |
contract_template.docx
)内容如下:
bash复制编辑合同编号:{{contract_no}}
甲方姓名:{{party_a}}
乙方姓名:{{party_b}}
合同金额:{{amount}} 元
签署日期:{{date}}
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)
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 表格(data.xlsx):
编号 | 姓名 | 部门 | 金额 |
---|---|---|---|
20240601A | 张三 | 财务 | 8500 |
20240601B | 李四 | 技术 | 9500 |
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
:
python复制编辑section = doc.sections[0]
header = section.header
footer = section.footer
header.paragraphs[0].text = "XX公司 Confidential"
footer.paragraphs[0].text = "第 { PAGE } 页"
需要借助 Word COM(仅 Windows)或 docx2pdf
:
bash复制编辑pip install docx2pdf
python复制编辑from docx2pdf import convert
convert("合同_张三.docx")
生成 合同_张三.pdf
,适合正式发送或归档。
你可以结合 Tkinter 实现文档生成 GUI 程序:
结合 pyinstaller 打包为桌面工具供他人使用。
问题 | 解决方法 |
---|---|
替换占位符后样式丢失 | 替换 run 内容更复杂,可用 python-docx-template |
表格列宽不一致 | 使用 table.columns[x].width = value 手动设置 |
不支持 doc 格式 | python-docx 仅支持 .docx |
无法插入页码 | 页码只能用 Word 模板提前插入域字段 { PAGE } |
docxtpl
实现复杂模板相比手动替换字符串,更推荐使用 docxtpl
:
bash复制编辑pip install docxtpl
配合 Jinja2 模板语法:
python复制编辑from docxtpl import DocxTemplate
tpl = DocxTemplate("contract_template.docx")
tpl.render(context)
tpl.save("filled.docx")
模板内写法类似:
复制编辑甲方:{{ party_a }}
乙方:{{ party_b }}
场景 | 示例 |
---|---|
合同自动生成 | 招聘合同、销售合同、项目协议 |
工资条批量生成 | 每月工资单、奖金单、部门汇总 |
证明/通知类文档 | 开会通知、成绩单、评语、奖学金文件 |
Word 生成报告 | 分析报告、季度小结、客户简报 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。