Python Word写入案例如何生成Word文件

wen python案例 23

本文目录导读:

Python Word写入案例如何生成Word文件

  1. 安装库
  2. 基础案例:创建简单Word文档
  3. 完整案例:生成报告文档
  4. 高级案例:批量生成合同/模板
  5. 实用工具函数
  6. 注意事项

我来为你提供几个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')

注意事项

  1. 字体兼容性:确保系统中存在使用的字体
  2. 文件路径:使用绝对路径或确保当前目录有写入权限
  3. 表格样式:可以使用docx内置样式或自定义
  4. 图片支持:支持添加图片,但要注意文件路径

这些案例涵盖了Word文档生成的主要场景,可以根据实际需求进行调整和扩展。

抱歉,评论功能暂时关闭!