Python docx 库实战指南:从零开始掌握文档自动化处理

1次阅读
没有评论

共计 1539 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

一、认识 docx 文件结构

Word 文档在 python-docx 中被抽象为三层对象结构:

Python docx 库实战指南:从零开始掌握文档自动化处理

  1. Document:顶层对象,代表整个.docx 文件
  2. Paragraph:段落对象,包含换行符终止的文本块
  3. Run:文本片段,共享相同格式的最小单位

这种层级关系意味着:

  • 每个 Document 包含多个 Paragraph
  • 每个 Paragraph 包含多个 Run
  • 样式控制通常在 Run 级别实现

二、基础操作实战

1. 创建新文档

from docx import Document

doc = Document()  # 创建空白文档
doc.add_paragraph('这是第一个段落')  # 添加段落
doc.save('demo.docx')  # 保存文档

2. 文本格式控制

paragraph = doc.add_paragraph()
run = paragraph.add_run('加粗文本')
run.bold = True  # 设置粗体
run.font.size = Pt(14)  # 设置字号

3. 表格操作

table = doc.add_table(rows=2, cols=2)  # 创建 2x2 表格
cell = table.cell(0, 1)  # 获取第一行第二列
cell.text = '内容'  # 写入内容

三、进阶功能实现

1. 页眉页脚设置

section = doc.sections[0]
header = section.header
header.paragraphs[0].text = "公司机密"

2. 样式继承陷阱

  • 新 Run 默认继承前一个 Run 的样式
  • 解决方法:显式设置所有样式属性
# 错误示例:可能意外继承格式
run1 = paragraph.add_run('正常文本')
run1.bold = True
run2 = paragraph.add_run('不想加粗的文本')  # 实际会被加粗

# 正确做法
run2 = paragraph.add_run('正常文本')
run2.bold = False  # 显式设置

3. 性能优化技巧

  • 批量操作时先构建内存对象,最后统一保存
  • 避免在循环中频繁调用 save()
  • 使用 python-docx-template 处理复杂模板

四、综合案例:周报生成器

import datetime

def generate_weekly_report():
    doc = Document()

    # 标题
    title = doc.add_paragraph()
    title.add_run(f"周报 {datetime.date.today()}").bold = True

    # 工作内容
    doc.add_heading('本周工作', level=2)
    tasks = ['项目 A 开发', '会议记录整理', 'BUG 修复']
    for task in tasks:
        doc.add_paragraph(task, style='ListBullet')

    # 下周计划表格
    doc.add_heading('下周计划', level=2)
    table = doc.add_table(rows=1, cols=3)
    table.style = 'LightShading'

    # 表头
    headers = table.rows[0].cells
    headers[0].text = '优先级'
    headers[1].text = '任务内容'
    headers[2].text = '负责人'

    doc.save('weekly_report.docx')

五、扩展建议

  1. 尝试读取现有文档内容(Document('existing.docx')
  2. 实现邮件合并功能(替换模板中的占位符)
  3. 探索文档分节与页码控制
  4. 结合 Pandas 将数据表格导出为 Word 格式

通过本指南,您应该已经掌握了 python-docx 的核心功能。实际项目中建议结合具体需求,先构建最小可行原型,再逐步添加复杂功能。文档自动化可以显著提升办公效率,值得投入时间深入学习。

正文完
 0
评论(没有评论)