广告

Python 操作PPT教程:python-pptx 使用详解与实战案例

1. 环境搭建与安装要点

1.1 安装 Python 与创建虚拟环境

在开始之前,确保已经安装 Python 3.x,并了解如何使用虚拟环境来隔离依赖。

使用虚拟环境可以避免与全局包冲突,常用工具有 venvvirtualenv。以下给出创建虚拟环境的基本步骤,帮助确保后续依赖安装的稳定性。

# 使用 venv 创建虚拟环境
python -m venv venv_pptx
# 激活(不同系统略有差异)
# Windows
venv_pptx\\Scripts\\activate
# macOS/Linux
source venv_pptx/bin/activate

1.2 安装 python-pptx 及依赖检查

核心库是 python-pptx,它提供了对 PPTX 的读写能力,兼容 PowerPoint 2010 及以上的格式。

确保依赖正确安装,执行一次简单的导入测试,能早期发现环境问题。

pip install python-pptx
python -c "import pptx; print(pptx.__version__)"

2. 基本操作:创建演示文稿和幻灯片

2.1 创建演示文稿与添加幻灯片

在 python-pptx 中,Presentation 是核心对象,用于承载所有幻灯片。

通过添加幻灯片模板(布局)来创建第一张幻灯片,常用的布局包括标题页、文本页等。

from pptx import Presentation

prs = Presentation()  # 新建演示文稿
slide_layout = prs.slide_layouts[0]  # 使用标题幻灯片布局
slide = prs.slides.add_slide(slide_layout)

title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "自动化生成 PPTX"
subtitle.text = "使用 python-pptx 的基本流程"

prs.save("demo.pptx")

2.2 设置文本与段落格式

文本框中的 TextFrame 支持多段落和多级列表,段落样式 可以通过运行时调整。

要在幻灯片上写入多行文本,通常需要获取文本框对象的 text_frame,再逐段添加。

# 向标题下方的文本框写入多段文字
text_frame = slide.shapes[1].text_frame
text_frame.clear()  # 清空原有文本

p = text_frame.paragraphs[0]
p.text = "这是自动生成的幻灯片文本"

p = text_frame.add_paragraph()
p.text = "这是第二段文字,包含多段落"

# 设置段落样式
for para in text_frame.paragraphs:
    para.font.bold = True  # 将段落文本设为粗体

3. 图像和对象的处理

3.1 插入图片

图片是 PPTX 中常见的多媒体元素,python-pptx 提供 add_picture 方法。

图片的放置位置和大小通过坐标和大小参数控制,通常以英寸或厘米为单位。

from pptx.util import Inches

left = Inches(1)
top = Inches(1.5)
width = Inches(4)
height = Inches(3)

slide.shapes.add_picture("logo.png", left, top, width=width, height=height)

3.2 插入形状与文本框

除了图片,可以插入矩形、圆形、文本框等形状,AutoShapeType 提供图形类型。

文本框用于放置自定义文本,与文本框的 TextFrame 也是关键入口。

from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches, Pt

left = Inches(0.5)
top = Inches(2.0)
width = Inches(4)
height = Inches(1.5)

shape = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height)
text_frame = shape.text_frame
text_frame.text = "这是自定义文本框"

# 设置文本段落样式
para = text_frame.paragraphs[0]
para.font.size = Pt(14)

4. 高级特性与实战案例

4.1 数据驱动图表(Chart)

python-pptx 支持向幻灯片中添加图表组件,通过 ChartData 构造数据,再调用 add_chart

注意:不同版本的 PowerPoint 对图表的兼容性可能需要关注,确保生成的 PPTX 能在目标环境打开。

from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches, Pt

chart_data = ChartData()
chart_data.categories = ['Q1','Q2','Q3','Q4']
chart_data.add_series('销售额', (19, 21, 36, 38))

left = Inches(2)
top = Inches(2)
width = Inches(6)
height = Inches(4.5)

chart = slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, left, top, width, height, chart_data
).chart

chart.has_legend = True
chart.legend.font.size = Pt(12)

4.2 自动化批量生成幻灯片

通过循环和数据驱动,可以实现批量生成幻灯片,提升工作效率。

通过模板化幻灯片布局和数据源,生成一个包含标题、摘要与要点的演示文稿。

from pptx import Presentation
from pptx.util import Inches

prs = Presentation()
layout = prs.slide_layouts[5]  # 根据模板选择合适布局
for item in [
    {"title": "主题一", "points": ["要点A", "要点B"]},
    {"title": "主题二", "points": ["要点C", "要点D"]},
]:
    slide = prs.slides.add_slide(layout)
    slide.shapes.title.text = item["title"]
    body = slide.placeholders[1].text_frame
    body.text = item["points"][0]
    for p in item["points"][1:]:
        para = body.add_paragraph()
        para.text = p
prs.save("bulk.pptx")
广告

后端开发标签