本文目录导读:

我来为你提供几个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文档生成的主要场景,可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播