共计 1539 个字符,预计需要花费 4 分钟才能阅读完成。
一、认识 docx 文件结构
Word 文档在 python-docx 中被抽象为三层对象结构:

- Document:顶层对象,代表整个.docx 文件
- Paragraph:段落对象,包含换行符终止的文本块
- 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')
五、扩展建议
- 尝试读取现有文档内容(
Document('existing.docx')) - 实现邮件合并功能(替换模板中的占位符)
- 探索文档分节与页码控制
- 结合 Pandas 将数据表格导出为 Word 格式
通过本指南,您应该已经掌握了 python-docx 的核心功能。实际项目中建议结合具体需求,先构建最小可行原型,再逐步添加复杂功能。文档自动化可以显著提升办公效率,值得投入时间深入学习。
正文完
