本文目录导读:

我来为你提供几个Python生成Word文件的实用案例,使用python-docx库。
安装库
pip install python-docx
基础案例:创建简单Word文档
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
# 创建文档对象
doc = Document()
doc.add_heading('Python生成Word文档', level=0)
# 添加段落
doc.add_paragraph('这是一个使用python-docx库生成的Word文档。')
# 添加带格式的文本
p = doc.add_paragraph()
run = p.add_run('这是红色粗体文本')
run.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)
run.font.size = Pt(16)
# 保存文档
doc.save('简单文档.docx')
print("文档生成成功!")
完整案例:生成报告文档
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
import datetime
def create_report():
# 创建文档对象
doc = Document()
# 设置默认字体
style = doc.styles['Normal']
font = style.font
font.name = '宋体'
font.size = Pt(12)
# === 文档标题 ==== doc.add_heading('项目工作报告', level=0)alignment = WD_ALIGN_PARAGRAPH.CENTER
# === 基本信息 ===
doc.add_paragraph('')
info = doc.add_paragraph()
info.alignment = WD_ALIGN_PARAGRAPH.LEFT
# 添加报告日期
run = info.add_run(f'报告日期:{datetime.datetime.now().strftime("%Y年%m月%d日")}')
run.font.size = Pt(12)
# === 一级标题 ===
doc.add_heading('一、项目概述', level=1)
# 正文段落
p = doc.add_paragraph()
p.add_run('本项目旨在...').font.size = Pt(12)
# 添加项目符号列表
items = ['完成了需求分析', '设计了系统架构', '进行了代码开发', '完成了测试工作']
for item in items:
doc.add_paragraph(item, style='List Bullet')
# === 二级标题 ===
doc.add_heading('1.1 技术架构', level=2)
p = doc.add_paragraph()
run = p.add_run('关键技术栈:')
run.bold = True
# 添加表格
table = doc.add_table(rows=4, cols=3, style='Table Grid')
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 表头
headers = ['技术名称', '版本', '用途']
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
cell.paragraphs[0].runs[0].bold = True
# 表格数据
data = [
['Python', '3.9', '后端开发'],
['FastAPI', '0.88', 'Web框架'],
['PostgreSQL', '14', '数据库']
]
for i, row_data in enumerate(data, 1):
for j, cell_data in enumerate(row_data):
table.rows[i].cells[j].text = cell_data
# === 一级标题 ===
doc.add_heading('二、执行摘要', level=1)
# 添加图片(如果有图片文件)
# doc.add_picture('chart.png', width=Inches(5))
# 添加分页符
doc.add_page_break()
# === 表格案例 ===
doc.add_heading('三、项目进度表', level=1)
progress_data = [
['阶段', '开始日期', '结束日期', '状态'],
['需求分析', '2024-01-01', '2024-01-15', '已完成'],
['设计开发', '2024-01-16', '2024-02-28', '进行中'],
['测试部署', '2024-03-01', '2024-03-15', '未开始']
]
table2 = doc.add_table(rows=4, cols=4, style='Light Grid Accent 1')
for i, row_data in enumerate(progress_data):
for j, cell_data in enumerate(row_data):
cell = table2.cell(i, j)
cell.text = cell_data
if i == 0: # 表头
cell.paragraphs[0].runs[0].bold = True
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 保存文档
doc.save('项目工作报告.docx')
print("报告生成成功!")
# 执行
create_report()
高级案例:批量生成合同/模板
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
import os
def create_contract(template_data):
"""
根据模板数据生成合同
template_data: dict 包含合同信息的字典
"""
doc = Document()
# 设置页面边距
for section in doc.sections:
section.top_margin = Cm(2.54)
section.bottom_margin = Cm(2.54)
section.left_margin = Cm(3.17)
section.right_margin = Cm(3.17)
# 合同标题= doc.add_heading('合 同 书', level=0)alignment = WD_ALIGN_PARAGRAPH.CENTER
# 合同编号
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
run = p.add_run(f'合同编号:{template_data["contract_no"]}')
run.font.size = Pt(10)
doc.add_paragraph() # 空行
# 合同信息
info_text = f"""甲方(采购方):{template_data['party_a']}
乙方(供应方):{template_data['party_b']}
按照《中华人民共和国民法典》及相关法律法规,甲乙双方在平等自愿、协商一致的基础上,就以下事项达成如下协议:
第一条 合同标的
{template_data['subject']}
第二条 合同金额
本合同总金额为人民币 {template_data['amount']} 元整(大写:{template_data['amount_cn']})。
第三条 付款方式
{template_data['payment_method']}
第四条 履行期限
本合同自 {template_data['start_date']} 起至 {template_data['end_date']} 止。
第五条 违约责任
{template_data['penalty']}
本合同一式两份,甲乙双方各执一份,具有同等法律效力。
甲方(盖章): 乙方(盖章):
签约代表: 签约代表:
日期: 日期:"""
# 添加合同内容
for line in info_text.split('\n'):
p = doc.add_paragraph()
run = p.add_run(line)
run.font.size = Pt(12)
# 设置标题行格式
if '第一条' in line or '第二条' in line:
run.bold = True
# 保存文件
filename = f"合同_{template_data['contract_no']}.docx"
doc.save(filename)
print(f"合同生成成功:{filename}")
return filename
# 批量生成合同示例
contracts = [
{
'contract_no': 'CT2024001',
'party_a': '北京科技有限公司',
'party_b': '上海软件有限公司',
'subject': '企业管理系统开发服务',
'amount': '500,000',
'amount_cn': '伍拾万',
'payment_method': '合同签订后支付30%,验收后支付70%',
'start_date': '2024年1月1日',
'end_date': '2024年6月30日',
'penalty': '任何一方违约需支付合同总金额20%的违约金'
},
# 可以添加更多合同数据
]
# 批量生成
for contract in contracts:
create_contract(contract)
实用工具函数
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
def set_cell_shading(cell, color):
"""设置表格单元格背景色"""
from docx.oxml.ns import qn
shading_elm = cell._element.get_or_add_tcPr()
shading = shading_elm.makeelement(qn('w:shd'), {
qn('w:val'): 'clear',
qn('w:color'): 'auto',
qn('w:fill'): color
})
shading_elm.append(shading)
def add_formatted_text(paragraph, text, bold=False, italic=False,
size=12, color=None, alignment=None):
"""添加格式化文本到段落"""
run = paragraph.add_run(text)
run.bold = bold
run.italic = italic
run.font.size = Pt(size)
if color:
run.font.color.rgb = RGBColor(*color)
if alignment:
paragraph.alignment = alignment
return run
# 使用示例
doc = Document()
p = doc.add_paragraph()
add_formatted_text(p, "重要提示:", bold=True, size=14, color=(255, 0, 0))
add_formatted_text(p, "请仔细阅读以下条款...", size=12)
doc.save('格式化文档.docx')
注意事项
- 字体兼容性:确保系统中存在使用的字体
- 文件路径:使用绝对路径或确保当前目录有写入权限
- 表格样式:可以使用
docx内置样式或自定义 - 图片支持:支持添加图片,但要注意文件路径
这些案例涵盖了Word文档生成的主要场景,可以根据实际需求进行调整和扩展。