当前位置: 首页 > ops >正文

python-pptx 库(最常用,适合生成/修改 PPT 文件)

1. 使用 python-pptx 库(最常用,适合生成/修改 PPT 文件)

📦 安装:

pip install python-pptx

📌 功能:

  • 创建新的 PPT

  • 新增/删除幻灯片

  • 插入文字、图片、表格、图表

  • 设置文字样式、布局

🔧 示例:

from pptx import Presentation from pptx.util import Inches, Pt # 创建 PPT 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 = "Python 操作 PPT" subtitle.text = "使用 python-pptx" # 再加一张幻灯片(空白) blank_slide_layout = prs.slide_layouts[6] slide2 = prs.slides.add_slide(blank_slide_layout) # 添加文本框 left = top = Inches(2) width = height = Inches(4) txBox = slide2.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.text = "这是一个文本框" # 改变字体 p = tf.add_paragraph() p.text = "Hello PowerPoint!" p.font.bold = True p.font.size = Pt(28) # 保存 prs.save("demo.pptx")


2. 使用 win32com(仅限 Windows)

如果你需要 控制已经安装的 PowerPoint 软件(比如打开 PPT,播放幻灯片),可以用 pywin32

📦 安装:

pip install pywin32

🔧 示例:

import win32com.client # 打开 PowerPoint ppt = win32com.client.Dispatch("PowerPoint.Application") ppt.Visible = True # 新建演示文稿 presentation = ppt.Presentations.Add() # 添加一张幻灯片 slide = presentation.Slides.Add(1, 1) # 1: ppLayoutTitle slide.Shapes.Title.TextFrame.TextRange.Text = "Python 控制 PPT" slide.Shapes.Placeholders(2).TextFrame.TextRange.Text = "副标题" # 保存 presentation.SaveAs(r"C:\Users\YourName\Desktop\demo_win32.pptx") presentation.Close() ppt.Quit()


对比

  • python-pptx:跨平台,适合 批量生成修改文件

  • win32com:只能在 Windows 上用,适合 操作 PowerPoint 软件 本身(比如打开、播放、截图)。

from pptx import Presentation prs = Presentation()

这里的 prs 不是一个包,而是 Presentation 类的实例。
真正的包是 python-pptx,它的顶层模块是 pptx


1. python-pptx 包的结构

当你 import pptx 的时候,里面主要包含这些子模块:

  • pptx.presentation

    • 提供 Presentation 类(整个 PPT 文档对象)

  • pptx.slide

    • 提供 Slide(幻灯片对象)、SlideLayoutSlideMaster

  • pptx.shapes

    • shapes.autoshape:常规形状(矩形、圆形等)

    • shapes.picture:图片

    • shapes.graphfrm:图表

    • shapes.table:表格

    • shapes.text:文本框、段落、字体

  • pptx.chart

    • 图表相关(柱状图、折线图、饼图等)

  • pptx.dml

    • 绘图和格式(颜色、线条、填充)

  • pptx.enum

    • 枚举类型(对齐方式、占位符类型等)

  • pptx.oxml

    • 低层级的 XML 元素(对应 Office OpenXML)

  • pptx.parts

    • 文档部件(PPTX 文件内部的部分)

  • pptx.util

    • 工具(Inches, Pt, Cm 等单位换算)


2. Presentation(也就是 prs)对象的属性

当你写 prs = Presentation() 后,prs 就是 演示文稿对象,里面有几个核心属性:

  • prs.slides
    幻灯片集合(Slide 对象列表)

    • .add_slide(layout):新增幻灯片

    • [i]:按索引取幻灯片

  • prs.slide_layouts
    可用的幻灯片布局集合(标题页、标题+内容、空白页等)

  • prs.core_properties
    文档属性(作者、标题、关键词)

  • prs.save("file.pptx")
    保存为 PPTX 文件


3. Slide 对象的子内容

  • slide.shapes:所有形状(文本框、图片、表格等)

  • slide.placeholders:占位符(标题、副标题等)

  • slide.notes_slide:备注页


4. Shape 对象常用分类

  • .text_frame:文本框

  • .table:表格

  • .chart:图表

  • .picture:图片


📌 总结一下:

  • prs 其实是 pptx.Presentation 的实例,不是包。

  • 真正的包是 pptx,它下面有 presentationslideshapeschartutil 等子模块。

要不要我给你画一张 结构图(包 → 类 → 方法),这样你能直观看到 pptx 里的层次关系?

您说:

我现在想要实现所有的内容全部使用占位符,那么这个时候我该怎么实现呢

ChatGPT 说:

好问题 👍
如果你希望 所有内容都通过占位符(placeholder)来填充,核心思路就是:

  1. 先准备一个 PPT 模板(.pptx),里面定义好所有版式(标题、副标题、内容、图片位置、表格位置……)。

    • 因为 python-pptx 只能填充已有占位符,不能自己新建“真正的占位符”。

    • 占位符是在 PowerPoint 里由版式 (Slide Layout) 定义的。

  2. 在 Python 中加载模板,按需要选择对应的版式。

  3. 通过 slide.placeholders 来填充内容


基础用法

from pptx import Presentation # 打开已有模板 prs = Presentation("template.pptx") # 选择第一个版式(比如标题页) slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(slide_layout) # 填充标题占位符(一般是 0) title = slide.placeholders[0] title.text = "这是标题" # 填充副标题(一般是 1) subtitle = slide.placeholders[1] subtitle.text = "这是副标题" # 再添加一个内容页(例如第 1 号版式:标题+内容) content_layout = prs.slide_layouts[1] slide2 = prs.slides.add_slide(content_layout) # 填充内容占位符 title2 = slide2.placeholders[0] content = slide2.placeholders[1] title2.text = "内容页标题" content.text = "这里是内容占位符的文字"


检查占位符 ID

有时候不知道模板里 哪个编号对应哪个占位符,可以打印出来:

for idx, placeholder in enumerate(slide.placeholders): print(f"索引 {idx}, 占位符类型: {placeholder.placeholder_format.type}")

输出会显示每个占位符的 索引类型(标题、副标题、正文、图片等)。
这样你就能确认用 placeholders[i] 来填充。


填充表格、图片占位符

如果模板里有表格或图片占位符,也能直接填充:

# 表格占位符 table_ph = slide.placeholders[2] # 具体索引要用上面的打印确认 table = table_ph.insert_table(rows=3, cols=3).table table.cell(0,0).text = "表头1" table.cell(1,0).text = "数据1" # 图片占位符 img_ph = slide.placeholders[3] img_ph.insert_picture("example.png")


总结

✅ 步骤:

  1. PPT 模板 里设计好占位符。

  2. 在 Python 里通过 slide_layouts 选择版式。

  3. slide.placeholders[i].text / insert_picture / insert_table 来填充内容。


要不要我帮你写一个 通用函数,比如传入一个字典 {占位符编号: 内容},就能自动把一页幻灯片填好?这样就可以灵活批量生成。

http://www.xdnf.cn/news/19460.html

相关文章:

  • 深入解析quiche开源项目:从QUIC协议到云原生实践
  • 大模型微调与LoRA/QLoRA方法解析
  • 四、练习1:Git基础操作
  • Python爬虫实战:研究Colormap,构建优质色彩方案数据采集和分析系统
  • 学习:uniapp全栈微信小程序vue3后台-暂时停更
  • C# Task 入门:让你的程序告别卡顿
  • 一文读懂k8s的pv与pvc原理
  • 【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案
  • 【Netty4核心原理⑭】【Netty 内存分配 ByteBuf❷】
  • 计算机组成原理1 组成与各部件流程 9.1
  • 国内服务器如何安装docker或者是1panel
  • 鸿蒙总改变字体大小设置
  • 计算机网络---https(超文本传输安全协议)
  • Kafka面试精讲 Day 4:Consumer消费者模型与消费组
  • SQLSERVER关键字
  • npm 打包上传命令,撤销错误版本
  • 智能核心:机器人芯片的科技革新与未来挑战
  • 开源npm引导guide组件
  • GIT(了解)
  • 音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
  • 前端数据可视化:基于Vue3封装 ECharts 的最佳实践
  • Prometheus Alertmanager 告警组件学习
  • GD32F303在移植FreeRTOS时,系统卡死在Systick_Handler B.的处理方法
  • 164.在 Vue3 中使用 OpenLayers 加载 Esri 地图(多种形式)
  • 后端Web实战-多表操作员工列表查询
  • Spring Bean生命周期的完全指南
  • 面试常考css:三列布局实现方式
  • Interceptor拦截器入门知识及其工作原理
  • 虚拟化技术是什么?电脑Bios中的虚拟化技术怎么开启
  • S32K3平台FEE 应用笔记