Python PPT合并与拆分 – 详解
目录
使用工具
Python 合并 PPT
合并多个PPT文档
合并每个PPT文档中的特定幻灯片
Python 拆分 PPT
按幻灯片数量拆分
按幻灯片范围拆分
按幻灯片内容拆分
按节 (Section) 拆分
在日常工作或学习中,我们经常需要对PPT文件进行调整,比如将多个PPT合并成一个,方便进行统一演示;或者将一个大型PPT拆分成多个小文件,便于团队协作或分类管理。对于经常需要合并或拆分PPT的人来说,使用代码自动执行此过程可以节省大量时间和精力。本博客将详细介绍如何使用 Python 自动化 PPT 合并和拆分的过程,包括以下内容:
- Python 合并 PPT
- 合并多个PPT文档
- 合并每个PPT文档中的特定幻灯片
- Python 拆分 PPT
- 按幻灯片数量拆分
- 按幻灯片范围拆分
- 按幻灯片内容拆分
- 按节 (Section) 拆分
使用工具
要在Python中实现PPT合并和拆分,可以使用 Spire.Presentation for Python库。该库主要用于在Python中创建、读取、修改和转换PowerPoint文件(包括.ppt和.pptx等格式)。
你可以通过以下命令安装此库:
pip install Spire.Presentation
Python 合并 PPT
合并PPT文件通常包括以下步骤:
- 打开每个待合并的PPT文档。
- 将这些PPT中的幻灯片复制到一个新的或指定的PPT中。
- 保存合并后的PPT文档。
下面将探讨两种常见的合并方法:合并多个PPT文档,以及合并每个PPT文档中的特定幻灯片。
合并多个PPT文档
在将多个 PPT 合并为一个文件时,通常需要按照每个文件中幻灯片的顺序进行排列。以下代码展示了如何创建一个新的 PPT,并依次从给定列表里的每个 PPT 文件中复制幻灯片到新PPT:
from spire.presentation import *# 合并多个 PPT 到一个新的 PPT
def merge_presentations(presentation_files, output_file):# 创建一个新的 PPTmerged_presentation = Presentation()# 移除默认空白幻灯片merged_presentation.Slides.RemoveAt(0)for file in presentation_files:# 加载待合并的 PPTpresentation = Presentation()presentation.LoadFromFile(file) for slide in presentation.Slides:# 将幻灯片依次复制到新 PPT 中merged_presentation.Slides.AppendBySlide(slide)# 保存合并后的 PPTmerged_presentation.SaveToFile(output_file, FileFormat.Pptx2016)# 要合并的 PPT 文件列表
files_to_merge = ["ppt1.pptx", "ppt2.pptx", "ppt3.pptx"]
# 调用合并方法
merge_presentations(files_to_merge, "合并PPT.pptx")
合并每个PPT文档中的特定幻灯片
如果你只想合并每个 PPT 中的特定幻灯片,可以通过指定幻灯片的索引(从0开始)来实现。以下代码允许你通过 slide_indices 参数选择要从每个 PPT 中提取的幻灯片:
from spire.presentation import *# 合并多个 PPT 中指定的幻灯片到一个新的 PPT
def merge_selected_slides(presentation_files, slide_indices, output_file):# 创建一个新的 PPTmerged_presentation = Presentation()# 移除默认空白幻灯片merged_presentation.Slides.RemoveAt(0)for i, file in enumerate(presentation_files):# 加载待合并的 PPTpresentation = Presentation()presentation.LoadFromFile(file) for j, slide in enumerate(presentation.Slides):if j in slide_indices[i]:# 将选定的幻灯片复制到新 PPT 中merged_presentation.Slides.AppendBySlide(slide)# 保存合并后的 PPTmerged_presentation.SaveToFile(output_file, FileFormat.Pptx2016)# 要合并的 PPT 文件列表
files_to_merge = ["ppt1.pptx", "ppt2.pptx"]
# 要合并的幻灯片索引
slide_indices = [[0, 2], [1]]
# 调用合并方法
merge_selected_slides(files_to_merge, slide_indices, "合并幻灯片.pptx")
Python 拆分 PPT
拆分 PPT 文件通常包括以下步骤:
- 加载原始 PPT。
- 选择要提取的幻灯片。
- 将这些幻灯片保存为一个新 PPT。
下面我们将探讨四种常见的拆分方法:按幻灯片数量拆分、按幻灯片范围拆分、按幻灯片内容拆分,以及按节(Section)拆分。
按幻灯片数量拆分
将一个 PPT 拆分为多个小文件,每个文件包含指定数量的幻灯片,是管理大型 PPT 的常见需求。下面的代码允许你指定每个文件包含的幻灯片数量,从而将一个大型PPT文件拆分为多个小型 PPT:
from spire.presentation import *
import os# 按指定的幻灯片数量拆分 PPT
def split_presentation_by_chunks(input_file, slides_per_file, output_directory):# 打开原始 PPTpresentation = Presentation()presentation.LoadFromFile(input_file)# 获取 PPT 中的总幻灯片数total_slides = presentation.Slides.Count# 确保输出目录存在if not os.path.exists(output_directory):os.makedirs(output_directory)# 按指定的块大小(slides_per_file)迭代幻灯片for start in range(0, total_slides, slides_per_file):# 为当前块创建一个新的 PPTsplit_presentation = Presentation()# 移除新 PPT 中的默认空白幻灯片split_presentation.Slides.RemoveAt(0)# 将当前块范围内的幻灯片添加到新 PPTfor i in range(start, min(start + slides_per_file, total_slides)):split_presentation.Slides.AppendBySlide(presentation.Slides[i])# 保存新 PPT 到指定目录,文件名根据当前块的索引生成output_file = os.path.join(output_directory, f"部分_{start // slides_per_file + 1}.pptx")split_presentation.SaveToFile(output_file, FileFormat.Pptx2016)# 调用方法,将 PPT 按每 3 张幻灯片拆分为多个文件,并保存到指定目录
split_presentation_by_chunks("ppt1.pptx", 3, "输出文件夹/")
按幻灯片范围拆分
如果你需要提取特定范围的幻灯片,可以通过指定起始和结束幻灯片索引(从 0 开始)来创建新 PPT 文件。以下代码允许你提取指定范围内的幻灯片:
from spire.presentation import *# 提取PPT中特定范围的幻灯片并保存为新文件
def split_presentation_by_range(input_file, start_slide, end_slide, output_file):# 打开原始PPTpresentation = Presentation()presentation.LoadFromFile(input_file)# 创建一个新PPTsplit_presentation = Presentation()# 移除新PPT中的默认空白幻灯片split_presentation.Slides.RemoveAt(0)# 将指定范围内的幻灯片添加到新PPTfor i in range(start_slide, end_slide + 1):split_presentation.Slides.AppendBySlide(presentation.Slides[i])# 保存新PPTsplit_presentation.SaveToFile(output_file, FileFormat.Pptx2016)# 调用方法,从PPT中提取第3 - 6张幻灯片并保存为新文件
split_presentation_by_range("ppt1.pptx", 2, 5, "按幻灯片范围拆分.pptx")
按幻灯片内容拆分
有时,你可能需要根据特定关键字或短语拆分 PPT。此方法可以提取包含特定内容的幻灯片,便于整理相关信息。以下代码会扫描每张幻灯片中的文本,如果找到指定关键字,则将该幻灯片添加到新 PPT 中:
from spire.presentation import *# 提取包含特定关键字的幻灯片到新PPT中
def split_by_content(input_file, keyword, output_file):# 打开原始PPTpresentation = Presentation()presentation.LoadFromFile(input_file)# 创建一个新的PPTsplit_presentation = Presentation()# 移除新PPT中的默认空白幻灯片split_presentation.Slides.RemoveAt(0)# 遍历原始PPT中的每张幻灯片for slide in presentation.Slides:# 检查幻灯片中的每个形状是否包含文本for shape in slide.Shapes:# 确保形状是AutoShape并具有文本框if isinstance(shape, IAutoShape) and shape.TextFrame is not None:# 检查文本中是否包含关键字if keyword in shape.TextFrame.Text:# 如果找到关键字,将幻灯片添加到新PPT中split_presentation.Slides.AppendBySlide(slide)break # 保存新PPTsplit_presentation.SaveToFile(output_file, FileFormat.Pptx2016)# 调用方法,将包含"科技"关键字的幻灯片提取到新PPT中
split_by_content("示例.pptx", "科技", "按幻灯片内容拆分.pptx")
按节 (Section) 拆分
在某些情况下,PPT 文档被分成多个节,每个节包含相关的幻灯片。按节拆分可以帮助我们将每个节中的幻灯片提取并保存为独立的 PPT 文件。以下代码展示了如何遍历每个节,并将其保存为单独的 PPT 文件:
from spire.presentation import *
import osdef split_presentation_by_section(input_file, output_directory):# 打开原始 PPTpresentation = Presentation()presentation.LoadFromFile(input_file)# 确保输出目录存在if not os.path.exists(output_directory):os.makedirs(output_directory)# 遍历所有节for i in range(presentation.SectionList.Count):# 获取当前节section = presentation.SectionList[i]# 创建新的 PPT new_presentation = Presentation()# 移除默认的空白幻灯片new_presentation.Slides.RemoveAt(0)# 添加节到新PPTnew_section = new_presentation.SectionList.Append(section.Name)# 获取当前节的幻灯片slides = section.GetSlides()# 将每个幻灯片插入到新的节中for slide_index, slide in enumerate(slides):new_section.Insert(slide_index, slide)# 保存新PPToutput_file = f"{output_directory}Section-{i + 1}.pptx"new_presentation.SaveToFile(output_file, FileFormat.Pptx2019) # 调用方法,按节拆分 PPT
split_presentation_by_section("节.pptx", "输出文件夹/")
以上就是使用 Python 实现 PPT 合并和拆分的全部内容,感谢阅读!
相关文章:
Python PPT合并与拆分 – 详解
目录 使用工具 Python 合并 PPT 合并多个PPT文档 合并每个PPT文档中的特定幻灯片 Python 拆分 PPT 按幻灯片数量拆分 按幻灯片范围拆分 按幻灯片内容拆分 按节 (Section) 拆分 在日常工作或学习中,我们经常需要对PPT文件进行调整,比如将多个PPT…...

舌头分割数据集labelme格式2557张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2557 标注数量(json文件个数):2557 标注类别数:1 标注类别名称:["tongue"] 每个类别标注的框数࿱…...
LVS能否实现两台服务器的负载均衡
LVS能否实现两台服务器的负载均衡 是的,LVS(Linux Virtual Server)可以实现两台服务器的负载均衡,并且它非常适合这种场景。 LVS(Linux Virtual Server)简介: LVS 是一种基于 Linux 的负载均…...
onlyoffice 容器配置修改后制作镜像导出以及上传到 dockerhub
1.将容器制作成新的镜像 docker commit -p -a "xxx" -m "zh-cn-20-100" onlyoffice ooffice:7.1.1.23docker commit: 这是 Docker 中用于创建新镜像的命令。 -p: 这个选项用于在提交之前暂停容器的运行。这可以确保数据的完整性,因为容器在提交…...

Java常用 Date 时间格式化、Calender日历、正则表达式的用法
目录 1. SimpleDateFormat 日期格式化类 1.1 Date 类型转 String 1.2 String 类型转 Date 2. Calendar 日历类 3. 正则表达式 3.1 正则表达式的组成部分 3.2 手机号正则表达式 3.3 常用密码校验正则表达式 1. SimpleDateFormat 日期格式化类 SimpleDateFormat 是Java中…...
案例讲解自然语言处理(NLP)
自然语言处理(NLP)是一种涉及计算机与人类自然语言之间的交互的技术。以下是一些NLP技术的示例: 语言翻译:NLP可以用于将一种语言翻译成另一种语言。Google翻译就是一个使用NLP技术的例子,它可以将输入的文本从一种语言…...

tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)
这里我用的edge的插件闪击翻译。这里我英语不好,所以用这个可以顺便学习下英语。 任务一:What is Offensive Security?(什么是进攻性安全?) 很简单啊,通过阅读,知道以下哪个选项更能代表您模拟黑客操作…...
2.python变量
理解,我将提供更详细和深入的解释,包括一些进阶概念和实际应用的例子。我们将从变量类型开始,逐步深入到每种数据类型的特性、操作方法以及它们在编程中的应用场景。 文章目录 1. 变量赋值与作用域变量赋值变量作用域 2. 标准数据类型Number…...

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)
【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它…...
opencv获取摄像头的最大分辨率图像
事情是这样的,在拼多多花了40买了一个4k高清的摄像偷,确实清楚。但是我一直以为网络摄像头分辨率只有640*480,于是用python测试了一下,上代码 import cv2def get_max_resolution(camera_index):"""获取摄像头的最大分辨率。&…...

23.DDD与微服务
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…...

Redis是什么?Redis和MongoDB的区别在那里?
Redis介绍 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍: 一、数据结构支持 字符串(String) 这是Redis最…...
git SSL certificate problem: unable to get local issuer certificate
Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构(Certification Authority,CA)签发。如果Git客户端无法找到或验证本地签发者证书,就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…...

使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式
网上其他人写的都解决不了,要不用的是CMSIS V1版本,根据他们的方式搞完还是报错,今天花点时间自己搞一下。 不想自己动手?没问题,模版已上传Gitee https://gitee.com/maybe_404/stm32-f4xx_-free-rtos_-lwip_-templa…...

驱动开发系列30 - Linux Graphics DRM光标绘制分析
一:概述 本文分析了 Linux 直接渲染管理器 (DRM) 绘制光标的过程,目的是将 OpenGL 与 DRM 连接,弄清楚整个调用逻辑。本文将详细描述这一过程,介绍如何在图形软件栈中实现光标渲染。整体软件栈的架构图也将展示其中的各个组成部分及其相互关系。 二:代码介绍 drm-cursor …...
如何利用Java爬虫获得淘宝买家秀
在电商平台上,买家秀数据是商家了解消费者反馈、优化产品和服务的重要资源。本文将详细介绍如何利用Java爬虫技术获取淘宝商品的买家秀信息,并提供一个完整的代码示例。 一、淘宝买家秀数据的重要性 买家秀数据包括买家上传的图片、视频、评论等内容&a…...

【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
第一章、以问题导入的方式,深入掌握原理基础【理论篇】 1、R语言入门: (1)安装R及集成开发环境(IDE);(2)R语言基础语法与数据结构,包括:程序包安…...
虚幻引擎C++按键绑定
在项目的 Project Settings -> Engine -> Input 中进行配置。 配置输入映射的步骤: 打开 Project Settings: 在 Unreal Editor 中,点击菜单栏的 Edit -> Project Settings。 导航到 Input: 在 Project Settings 窗口的左侧导航栏中࿰…...
秒杀抢购场景下实战JVM级别锁与分布式锁
背景历史 在电商系统中,秒杀抢购活动是一种常见的营销手段。它通过设定极低的价格和有限的商品数量,吸引大量用户在特定时间点抢购,从而迅速增加销量、提升品牌曝光度和用户活跃度。然而,这种活动也对系统的性能和稳定性提出了极…...
【Pandas】pandas interval_range
Pandas2.2 General Top-level dealing with Interval data 方法描述interval_range([start, end, periods, freq, …])用于生成固定长度的区间序列 pandas.interval_range() pandas.interval_range() 是 Pandas 库中用于生成固定频率的 Interval 对象的函数。这些 Interval…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...