Python PPT合并与拆分 – 详解

目录

使用工具

[Python 合并 PPT](#Python 合并 PPT)

合并多个PPT文档

合并每个PPT文档中的特定幻灯片

[Python 拆分 PPT](#Python 拆分 PPT)

按幻灯片数量拆分

按幻灯片范围拆分

按幻灯片内容拆分

[按节 (Section) 拆分](#按节 (Section) 拆分)


在日常工作或学习中,我们经常需要对PPT文件进行调整,比如将多个PPT合并成一个,方便进行统一演示;或者将一个大型PPT拆分成多个小文件,便于团队协作或分类管理。对于经常需要合并或拆分PPT的人来说,使用代码自动执行此过程可以节省大量时间和精力。本博客将详细介绍如何使用 Python 自动化 PPT 合并和拆分的过程,包括以下内容:

  • Python 合并 PPT
    • 合并多个PPT文档
    • 合并每个PPT文档中的特定幻灯片
  • Python 拆分 PPT
    • 按幻灯片数量拆分
    • 按幻灯片范围拆分
    • 按幻灯片内容拆分
    • 按节 (Section) 拆分

使用工具

要在Python中实现PPT合并和拆分,可以使用 Spire.Presentation for Python库。该库主要用于在Python中创建、读取、修改和转换PowerPoint文件(包括.ppt和.pptx等格式)。

你可以通过以下命令安装此库:

python 复制代码
pip install Spire.Presentation

Python 合并 PPT

合并PPT文件通常包括以下步骤:

  • 打开每个待合并的PPT文档。
  • 将这些PPT中的幻灯片复制到一个新的或指定的PPT中。
  • 保存合并后的PPT文档。

下面将探讨两种常见的合并方法:合并多个PPT文档,以及合并每个PPT文档中的特定幻灯片。

合并多个PPT文档

在将多个 PPT 合并为一个文件时,通常需要按照每个文件中幻灯片的顺序进行排列。以下代码展示了如何创建一个新的 PPT,并依次从给定列表里的每个 PPT 文件中复制幻灯片到新PPT:

python 复制代码
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 中提取的幻灯片:

python 复制代码
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:

python 复制代码
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 文件。以下代码允许你提取指定范围内的幻灯片:

python 复制代码
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 中:

python 复制代码
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 文件:

python 复制代码
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 合并和拆分的全部内容,感谢阅读!

相关推荐
wang_yb3 分钟前
高效文件处理:Python pathlib实战指南
python·databook
da_pangzi5 分钟前
小红书视频链接,下载原视频分析。有个需求是小红书链接,视频下载到本地
爬虫·python
菜狗woc6 分钟前
opencv库中的函数应用
python·opencv·计算机视觉
Byron Loong27 分钟前
Python+OpenCV系列:模版匹配
python·opencv·计算机视觉
GOTXX1 小时前
【自动驾驶】单目摄像头实现自动驾驶3D目标检测
图像处理·人工智能·python·目标检测·机器学习·3d·自动驾驶
天天要nx1 小时前
D94【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
imred1 小时前
python数据分析一例:使用SQL和pandas对数据进行聚合和diff
python·sql·数据分析·pandas
da_pangzi2 小时前
头条文章链接,详细页面里面的视频地址下载分析、提取下载
python
kris00092 小时前
Pyhton知识分享第二十四天-模拟二叉树
开发语言·python·算法
ZPILOTE2 小时前
日志基础示例python和c++
c++·python·日志·log·logger·glog