Python 办公自动化:Word 与 PowerPoint 处理

Python 操作 Word 和 PowerPoint 文件

在日常办公中,大量重复性的文档工作(如开具离职证明、生成月度报表、制作荣誉证书)完全可以交给 Python 自动完成。通过“模板 + 数据”的模式,我们可以一秒钟生成成百上千份标准文档。

在 Python 生态中,操作 Word 的核心工具是 python-docx,而操作 PowerPoint 的利器则是 python-pptx

1. 自动化 Word 文档处理

首先,安装所需的三方库:

pip install python-docx

1.1 从零创建 Word 文档

python-docx 将文档拆分为 Document(文档)Paragraph(段落)Run(文字块) 三个层次。通过这三个层次,我们可以精确控制文档的每一处细节。

from docx import Document
from docx.shared import Cm, Pt

# 1. 初始化文档
doc = Document()

# 2. 添加标题与段落
doc.add_heading('Python 自动化办公实战', 0)
p = doc.add_paragraph('Python 不仅是 AI 的语言,更是')
# Run 允许我们在同一个段落内设置不同的格式
run = p.add_run('提升效率')
run.bold = True
run.font.size = Pt(14)
p.add_run('的神器。')

# 3. 插入图片与表格
doc.add_picture('logo.png', width=Cm(5))
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
hdr_cells = table.rows[0].cells
hdr_cells[0].text, hdr_cells[1].text, hdr_cells[2].text = '编号', '姓名', '备注'

# 4. 保存文件
doc.save('demo.docx')

1.2 核心进阶:基于模板批量生成文档

这是办公自动化最强大的应用场景。我们可以先手工制作一个带有占位符(如 {name})的 Word 模板,然后用 Python 循环替换其中的内容。

技术难点: 直接修改 paragraph.text 会导致该段落原有的加粗、颜色等样式丢失。正确做法是遍历段落中的 runs 进行文本替换。

from docx import Document

# 待填充的数据列表
data_list = [
    {'name': '骆昊', 'position': '架构师', 'company': 'Daoman Tech'},
    {'name': '王大锤', 'position': '开发工程师', 'company': '谷道科技'}
]

for item in data_list:
    doc = Document('template.docx')
    for p in doc.paragraphs:
        for run in p.runs:
            # 检查运行块中是否包含占位符
            if '{' in run.text:
                # 简单替换逻辑:将 {key} 替换为 item[key]
                for key, value in item.items():
                    placeholder = f'{{{key}}}'
                    if placeholder in run.text:
                        run.text = run.text.replace(placeholder, value)
    
    doc.save(f'{item["name"]}_证明.docx')

2. 自动化 PowerPoint 生成

对于 PPT,我们使用 python-pptx

pip install python-pptx

2.1 创建幻灯片

PPT 的逻辑基于 Slide Layout(幻灯片布局)。每一页 PPT 都是基于某个母版布局创建的,然后通过 Shape(形状/占位符) 填充内容。

from pptx import Presentation

# 1. 创建演示文稿对象
prs = Presentation()

# 2. 添加幻灯片(使用布局 0:标题页)
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)

# 3. 填充标题和副标题
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Python 数据分析报告"
subtitle.text = "生成时间:2026-03-25"

# 4. 添加内容页(使用布局 1:标题 + 内容)
content_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(content_layout)
slide.shapes.title.text = "核心结论"
tf = slide.placeholders[1].text_frame
tf.text = "1. 自动化效率提升 300%"
p = tf.add_paragraph()
p.text = "2. 错误率降低至 0%"
p.level = 0

prs.save('report.pptx')

3. 总结

  • Word 自动化:重点在于理解 ParagraphRun 的关系,通过模板替换实现批量化生产。
  • PPT 自动化:核心在于利用 slide_layouts 定位母版,通过 placeholders 填充文本和图表。
  • 价值所在:这类脚本属于“一劳永逸”的工程。虽然编写过程需要调试样式,但一旦投入使用,能节省大量的人工核对与排版时间。