Python PPT合并与拆分 – 详解

news2024/12/15 18:48:11

目录

使用工具

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):
    # 创建一个新的 PPT
    merged_presentation = Presentation()
    # 移除默认空白幻灯片
    merged_presentation.Slides.RemoveAt(0)

    for file in presentation_files:
        # 加载待合并的 PPT
        presentation = Presentation()
        presentation.LoadFromFile(file)    
        for slide in presentation.Slides:
            # 将幻灯片依次复制到新 PPT 中
            merged_presentation.Slides.AppendBySlide(slide)

    # 保存合并后的 PPT
    merged_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):
    # 创建一个新的 PPT
    merged_presentation = Presentation()
    # 移除默认空白幻灯片
    merged_presentation.Slides.RemoveAt(0)

    for i, file in enumerate(presentation_files):
        # 加载待合并的 PPT
        presentation = Presentation()
        presentation.LoadFromFile(file)  
        for j, slide in enumerate(presentation.Slides):
            if j in slide_indices[i]:
                # 将选定的幻灯片复制到新 PPT 中
                merged_presentation.Slides.AppendBySlide(slide)

    # 保存合并后的 PPT
    merged_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):
    # 打开原始 PPT
    presentation = 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):
        # 为当前块创建一个新的 PPT
        split_presentation = Presentation()
        # 移除新 PPT 中的默认空白幻灯片
        split_presentation.Slides.RemoveAt(0)

        # 将当前块范围内的幻灯片添加到新 PPT
        for 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):
    # 打开原始PPT
    presentation = Presentation()
    presentation.LoadFromFile(input_file)

    # 创建一个新PPT
    split_presentation = Presentation()
    # 移除新PPT中的默认空白幻灯片
    split_presentation.Slides.RemoveAt(0)

    # 将指定范围内的幻灯片添加到新PPT
    for i in range(start_slide, end_slide + 1):
        split_presentation.Slides.AppendBySlide(presentation.Slides[i])

    # 保存新PPT
    split_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):
    # 打开原始PPT
    presentation = Presentation()
    presentation.LoadFromFile(input_file)

    # 创建一个新的PPT
    split_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  
    
    # 保存新PPT
    split_presentation.SaveToFile(output_file, FileFormat.Pptx2016)

# 调用方法,将包含"科技"关键字的幻灯片提取到新PPT中
split_by_content("示例.pptx", "科技", "按幻灯片内容拆分.pptx")

按节 (Section) 拆分

在某些情况下,PPT 文档被分成多个节,每个节包含相关的幻灯片。按节拆分可以帮助我们将每个节中的幻灯片提取并保存为独立的 PPT 文件。以下代码展示了如何遍历每个节,并将其保存为单独的 PPT 文件:

from spire.presentation import *
import os

def split_presentation_by_section(input_file, output_directory):
    # 打开原始 PPT
    presentation = 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)
        
        # 添加节到新PPT
        new_section = new_presentation.SectionList.Append(section.Name)
        
        # 获取当前节的幻灯片
        slides = section.GetSlides()
        
        # 将每个幻灯片插入到新的节中
        for slide_index, slide in enumerate(slides):
            new_section.Insert(slide_index, slide)
        
        # 保存新PPT
        output_file = f"{output_directory}Section-{i + 1}.pptx"
        new_presentation.SaveToFile(output_file, FileFormat.Pptx2019)        

# 调用方法,按节拆分 PPT
split_presentation_by_section("节.pptx", "输出文件夹/")

以上就是使用 Python 实现 PPT 合并和拆分的全部内容,感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity3D仿星露谷物语开发3之动画系统初探

1、目标 我们希望使用已有的资源建一个动画demo,以此熟悉基于已有Animator/Animation资源的使用方法。 以Tree的动画系统为例,资源位于: 2、创建流程 (1)创建tree空对象 上面两个都是空对象。 (2&#…

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…

Java:183 基于SSM的高校食堂系统

项目介绍 基于SSM的食堂点餐系统 角色:管理员、用户、食堂 前台用户可以实现商品浏览,加入购物车,加入收藏,预定,选座,个人信息管理,收货信息管理,收藏管理,评论功能,…

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上,接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令,口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?

电脑运行时常见问题解析:文件夹打不开、闪退及“找不到iUtils.dll”报错 在使用电脑的过程中,我们可能会遇到文件夹打不开、软件闪退或系统报错等问题,特别是提示“找不到iUtils.dll”的报错,更是让人困惑不已。今天我将为大家详…

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…

计算机网络-传输层 UDP协议

学习一个网络协议,主要就是学习“数据格式/报文格式” UDP的特点 UDP传输的过程类似于寄信. ⽆连接: 知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接; 不可靠: 没有确认机制, 没有重传机制; 如果因为⽹络故障该段⽆法发到对⽅, UDP协议层也不会给应 ⽤层返回任…

[OpenGL] Transform feedback 介绍以及使用示例

一、简介 本文介绍了 OpenGL 中 Transform Feedback 方法的基本概念和代码示例。 二、Transform Feedback 介绍 1. Transform Feedback 简介 根据 OpenGL-wiki,Transform Feedback 是捕获由顶点处理步骤(vertex shader 和 geometry shader&#xff0…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接:https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章,一讲到PPO算法的细节就戛然而止了呢?要么直接略过,要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后,通过大疆智图软件可以对所飞行的区域的进行拼图,但是如果需要对拼好的图再次合并,则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法:点击“”图标进行导入操作…

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升,有很多小伙伴都开始学习或从事数据采集相关的工作。然而,网站数据已经成为网站的核心资产,许多网站都会设置一系列很复杂的防范措施,阻止外部人员随意采集其数据。为了解决这个问题&a…

免费送源码:Java+B/S+MySQL 多元化智能选课系统的设计与实现 计算机毕业设计原创定制

摘 要 多元化智能选课系统使用Java语言的Springboot框架,采用MVVM模式进行开发,数据方面主要采用的是微软的Mysql关系型数据库来作为数据存储媒介,配合前台技术完成系统的开发。 论文主要论述了如何使用JAVA语言开发一个多元化智能选课系统&…

(九)机器学习 - 多项式回归

多项式回归(Polynomial Regression)是一种回归分析方法,它将自变量 xx 和因变量 yy 之间的关系建模为 nn 次多项式。多项式回归的目的是找到一个 nn 次多项式函数,使得这个函数能够最好地拟合给定的数据点。 多项式回归的数学表达…

XX服务器上的npm不知道咋突然坏了

收到同事的V,说是:182上的npm不知道咋突然坏了,查到这里了,不敢动了。 咱一定要抓重点:突然坏了。这里的突然肯定不是瞬间(大概率是上次可用,这次不可用,中间间隔了多长时间&#x…

Vizcom:AI驱动的草图到3D设计革命

Vizcom是一家领先的AI技术公司,专注于为工业设计师提供工具,将手绘草图快速转化为可制造的3D模型,从而加速产品迭代和创新。 公司背景与愿景 成立于2021年的Vizcom由前Nvidia工业设计师Jordan Taylor创立。Taylor凭借其深厚的创意设计背景和技术敏锐度,看到了生成对抗网络…

html自带的input年月日(date) /时间(datetime-local)/星期(week)/月份(month)/时间(time)控件

年月日期控件 type"date" <input type"date" id"StartDate" valueDateTime.Now.ToString("yyyy-MM-dd") /> //设置值 $("#StartDate").val("2024-12-12"); //获取值 var StartDate$("#StartDate&quo…

【51单片机】独立按键快速上手

51单片机独立按键是单片机控制系统中常用的一种输入方式&#xff0c;它相当于一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开。 开关功能‌&#xff1a;独立按键内部通常包含一个有弹性的金属片&#xff0c;当按键被按下时&#xff0c;金属片与触点接触&a…

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务&#xff1f; ​ 假如我们需要搭建一个网上购物系统&#xff0c;那么我们需要哪些功能呢&#xff1f;商品中心、订单中心和客户中心等。 ​ 当业务功能较少时&#xff0c;我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间&#xff0c;我们在技术范围之外陷入了一个自证或者说下定义的怪圈&#xff0c;即要怎么样去介绍或者描述&#xff1a;我们是一个什么样的产品。它在当前这个世界上&#xff0c;处于…