跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonPPT制作

Python 办公自动化:PPT 高级功能与常用操作

综述由AI生成介绍利用 Python 的 python-pptx 库实现 PPT 办公自动化的关键技术点。内容包括向幻灯片中添加和设置预设形状、创建并配置各类图表、遍历读取 PPT 中的文本与表格数据,以及批量提取保存幻灯片内的图片资源。通过完整的代码示例,演示了如何高效处理演示文稿的结构化元素与多媒体内容,适用于日常办公场景的自动化需求。

暖阳发布于 2025/2/7更新于 2026/5/611 浏览
Python 办公自动化:PPT 高级功能与常用操作

Python 办公自动化:PPT 高级功能与常用操作

1. 前言

在办公自动化场景中,PowerPoint(PPT)是数据展示和汇报的重要载体。使用 Python 的 python-pptx 库可以高效地生成、修改和提取 PPT 内容,替代繁琐的人工操作。本系列文章将深入探讨 PPT 的高级功能及常用操作点。

本文档涵盖的核心内容包括:

  • 预设形状 Shape 的插入与属性配置
  • 图表 Chart 的创建与样式定制
  • PPT 文档内容的读取与解析
  • 幻灯片内图片资源的批量保存

2. 预设形状 Shape

实际上,PPT 文档的内容区主要由各类形状(Shape)组成,包含图片、文本框、视频、表格以及预设几何形状等。预设的普通形状种类非常丰富,涵盖了箭头、流程图符号、基本几何图形等。

2-1 插入形状

使用 slide.shapes.add_shape() 方法可以向幻灯片中插入一个形状。该方法需要指定形状类型、位置坐标及尺寸。

from pptx import Presentation
from pptx.util import Inches, Cm
from pptx.enum.shapes import MSO_SHAPE, MSO_SHAPE_TYPE

# 初始化演示文稿
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6]) # 空白版式

# 定义插入形状的函数
def insert_shape(slide, left, top, width, height, autoshape_type_id=MSO_SHAPE.CHEVRON, unit=Cm):
    """
    幻灯片中添加形状
    :param slide: 幻灯片对象
    :param left: 左边距
    :param top: 上边距
    :param width: 宽度
    :param height: 高度
    :param autoshape_type_id: 形状类型枚举
    :param unit: 单位,默认为 Cm (厘米)
    :return: 形状对象
    """
    shape = slide.shapes.add_shape(
        autoshape_type_id=autoshape_type_id,
        left=unit(left),
        top=unit(top),
        width=unit(width),
        height=unit(height)
    )
    return shape

# 示例:添加一个圆角矩形
rectangle = insert_shape(
    slide, 
    left=2, top=2, width=16, height=8, 
    autoshape_type_id=MSO_SHAPE.ROUNDED_RECTANGLE, 
    unit=Cm
)

2-2 设置形状属性

获取到形状对象后,我们可以进一步设置它的背景颜色、边框属性等视觉样式。

# 设置形状背景色为白色
rectangle.fill.solid()
rectangle.fill.fore_color.rgb = [, , ]


rectangle.line.color.rgb = [, , ]
rectangle.line.width = Cm()
255
255
255
# 设置边框颜色为红色,宽度为 0.5 厘米
255
0
0
0.5

通过遍历 MSO_SHAPE 枚举类,可以找到所有可用的预设形状类型进行组合使用。

3. 图表 Chart

图表是 PPT 中用于数据可视化的核心组件。使用 python-pptx 可以创建柱状图、饼图、折线图、散点图等多种类型的图表。

3-1 创建图表

首先需要准备图表数据对象 ChartData,然后指定图表类型并添加到幻灯片。

from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE

# 创建图表数据对象
chart_data = ChartData()

# 设置 X 轴类别(年份)
chart_data.categories = ['2000', '2005', '2010', '2015', '2020']

# 添加数据系列
# 参数分别为:系列名称、数据列表
chart_data.add_series('经济', [60, 65, 75, 90, 95])
chart_data.add_series('环境', [95, 88, 84, 70, 54])
chart_data.add_series('文化', [40, 65, 80, 95, 98])

# 插入图表
# 参数:图表类型,左,上,宽,高,数据
chart = slide.shapes.add_chart(
    XL_CHART_TYPE.LINE,
    Inches(4), Inches(5), Inches(20), Inches(9),
    chart_data
).chart

3-2 设置图表显示属性

创建图表后,可以通过图表对象调整图例、平滑度、字体样式等细节。

# 显示图例
chart.has_legend = True

# 图例是否在绘图区之外显示
chart.legend.include_in_layout = False

# 设置系列线条是否平滑
for series in chart.series:
    series.smooth = True

# 设置图表文字样式
chart.font.size = 12
chart.font.color.rgb = [255, 0, 0]

4. 读取内容

PPT 文档的结构化数据提取通常涉及遍历幻灯片中的所有形状。利用 shape.has_text_frame 属性可以判断形状内部是否包含文本框。

4-1 读取普通文本

def read_ppt_content(presentation):
    """
    读取 PPT 中所有的文本内容
    :param presentation: Presentation 对象
    :return: 文本列表
    """
    results = []
    for slide in presentation.slides:
        for shape in slide.shapes:
            if shape.has_text_frame:
                content = shape.text_frame.text
                if content.strip():
                    results.append(content)
    return results

# 使用示例
presentation = Presentation('./raw.pptx')
contents = read_ppt_content(presentation)
print(contents)

4-2 读取表格数据

对于嵌入的表格(Table),不能直接通过 text_frame 获取全部数据,需要遍历行和单元格。

from pptx.enum.shapes import MSO_SHAPE_TYPE

def read_ppt_table(presentation):
    table_data = []
    for slide in presentation.slides:
        for shape in slide.shapes:
            # 检查是否为表格形状
            if shape.shape_type == MSO_SHAPE_TYPE.TABLE:
                rows = []
                for row in shape.table.rows:
                    row_cells = [cell.text_frame.text for cell in row.cells]
                    rows.append(row_cells)
                table_data.append(rows)
    return table_data

5. 保存图片

在某些场景下,我们需要将 PPT 文档中包含的所有图片素材提取并保存到本地磁盘。

5-1 实现逻辑

  1. 遍历幻灯片内容区所有形状。
  2. 过滤出形状类型为 MSO_SHAPE_TYPE.PICTURE 的图片形状。
  3. 获取图片的二进制字节流(blob)。
  4. 根据图片类型写入文件。
import os
import uuid
from pptx.enum.shapes import MSO_SHAPE_TYPE

def save_ppt_images(presentation, output_path):
    """
    保存 PPT 中所有图片
    :param presentation: PPT 对象
    :param output_path: 保存目录
    """
    print(f'幻灯片数目:{len(presentation.slides)}')

    if not os.path.exists(output_path):
        os.makedirs(output_path)

    for slide in presentation.slides:
        for shape in slide.shapes:
            if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
                # 获取图片二进制字符流
                image_data = shape.image.blob
                # 获取图片 MIME 类型,如 image/jpeg
                image_type_pre = shape.image.content_type
                # 提取后缀名
                image_suffix = image_type_pre.split('/')[-1]
                
                # 生成唯一文件名
                file_name = f'{uuid.uuid4().hex}.{image_suffix}'
                output_image_path = os.path.join(output_path, file_name)

                with open(output_image_path, 'wb') as f:
                    f.write(image_data)
                print(f'Saved: {output_image_path}')

6. 总结

通过 python-pptx 库,开发者可以实现对 PPT 文档的深度控制。从基础的形状绘制到复杂的数据图表生成,再到文档内容的解析与资源提取,这套方案能够显著提升办公自动化效率。

在实际项目中,建议结合 os, uuid, datetime 等标准库处理文件路径和时间戳,确保生成的文件命名规范且无冲突。同时,注意处理异常捕获,防止因文件格式损坏导致程序中断。掌握这些核心 API 后,即可构建更复杂的自动化报表系统。

目录

  1. Python 办公自动化:PPT 高级功能与常用操作
  2. 1. 前言
  3. 2. 预设形状 Shape
  4. 2-1 插入形状
  5. 初始化演示文稿
  6. 定义插入形状的函数
  7. 示例:添加一个圆角矩形
  8. 2-2 设置形状属性
  9. 设置形状背景色为白色
  10. 设置边框颜色为红色,宽度为 0.5 厘米
  11. 3. 图表 Chart
  12. 3-1 创建图表
  13. 创建图表数据对象
  14. 设置 X 轴类别(年份)
  15. 添加数据系列
  16. 参数分别为:系列名称、数据列表
  17. 插入图表
  18. 参数:图表类型,左,上,宽,高,数据
  19. 3-2 设置图表显示属性
  20. 显示图例
  21. 图例是否在绘图区之外显示
  22. 设置系列线条是否平滑
  23. 设置图表文字样式
  24. 4. 读取内容
  25. 4-1 读取普通文本
  26. 使用示例
  27. 4-2 读取表格数据
  28. 5. 保存图片
  29. 5-1 实现逻辑
  30. 6. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • GitHub Copilot Pro 学生认证配置指南
  • C++ CAS 原子操作深度解析与实战
  • Qclaw 快速上手:利用微信连接 AI 智能体的实践
  • 执行式 AI 核心:API 调用与网络请求基础
  • Python YAML 模块使用教程:接口测试参数存储与配置
  • Photoshop 集成 Stable Diffusion 插件实战指南
  • 即梦 AI 生图进阶指南:核心参数与实战技巧
  • 从零搭建 SpringBoot 项目详解
  • 多卡部署 Qwen-VL-32B:vLLM 与 llama.cpp 性能对比分析
  • 支持国内股票分析的 AI 智能开源项目精选
  • Git 本地身份配置:用户名与邮箱设置详解
  • MCP Document Converter:让 AI 助手支持 25 种文档格式转换
  • Jenkins 自动化部署指南:从 Git 拉取代码并部署至 Nginx
  • 数据结构:栈与队列定义及 C 语言实现
  • 鸿蒙 APP 运维监控、生态运营与专属变现实战
  • 张一鸣:招聘人才需具备的三个核心标准
  • 基于 Spring Boot 与 Vue 的 Web 虚拟卡销售平台实战
  • 基于 Spring Boot + Vue 的无人机共享管理系统设计与实现
  • 从树到森林:决策树、随机森林与可解释性
  • Raphael AI:基于 Flux 模型的免费 AI 图像生成工具解析

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online