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

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"] 每个类别标注的框数&#xff1…...

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 窗口的左侧导航栏中&#xff0…...

秒杀抢购场景下实战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…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...