脚本专家 发表于 2026-9-22 13:00:00

Python合并PPT:幻灯片追加插入与批量处理

为什么用脚本合并 PPT
多人分章节准备汇报时,最后往往要按顺序合成一份完整演示文稿。手动复制容易丢主题、字体和动画,脚本合并的优势是可复现、可扩展:规则写好后,素材更新重跑即可。本文基于 Spire.Presentation for Python,核心操作都在 Slides 集合上,整体追加用 AppendBySlide,定点插入用 Slides.Insert。

环境准备
安装命令:

pip install Spire.Presentation


安装完成后导入模块:

from spire.presentation.common import *
from spire.presentation import *


整体追加到另一份文稿末尾
分别加载目标文稿与源文稿,遍历源文稿全部幻灯片,逐张 AppendBySlide 到目标末尾。保存目标文稿,源文稿本身不受影响。

from spire.presentation.common import *
from spire.presentation import *

inputFile_1 = "文档1.pptx"
inputFile_2 = "文档2.pptx"
outputFile = "ClonePPTAtEndOfAnother.pptx"

destPPT = Presentation()
destPPT.LoadFromFile(inputFile_2)
sourcePPT = Presentation()
sourcePPT.LoadFromFile(inputFile_1)

for slide in sourcePPT.Slides:
    destPPT.Slides.AppendBySlide(slide)

destPPT.SaveToFile(outputFile, FileFormat.Pptx2013)
destPPT.Dispose()

AppendBySlide 接收一张幻灯片对象,把它复制追加到目标 Slides 集合末尾。for 循环遍历源 Slides,相当于把整份文件搬过去。保存格式这里用 FileFormat.Pptx2013。

挑选幻灯片合并到新文稿
新建 Presentation 后,它默认带一张空幻灯片,需要先 RemoveAt(0) 删除,否则成品开头会多出空白页。然后加载多个来源,按索引挑选追加。

from spire.presentation.common import *
from spire.presentation import *

inputFile_1 = "文档1.pptx"
inputFile_2 = "文档2.pptx"
outputFile = "MergeSelectedSlides.pptx"

ppt = Presentation()
ppt.Slides.RemoveAt(0)

ppt1 = Presentation()
ppt1.LoadFromFile(inputFile_1)
ppt2 = Presentation()
ppt2.LoadFromFile(inputFile_2)

for i, unusedItem in enumerate(ppt1.Slides):
    ppt.Slides.AppendBySlide(ppt1.Slides)

ppt.Slides.AppendBySlide(ppt2.Slides)

ppt.SaveToFile(outputFile, FileFormat.Pptx2013)
ppt.Dispose()

ppt2.Slides 只取第二张。配合多个来源的追加顺序,可以自由编排新文稿页面。

插入到指定位置
如果要把幻灯片插进已有文稿中间,用 Slides.Insert(index, slide)。它接受插入位置索引和幻灯片对象两个参数。

from spire.presentation.common import *
from spire.presentation import *

inputFile_1 = "文档1.pptx"
inputFile_2 = "文档2.pptx"
outputFile = "CloneSlideToAnotherPPT.pptx"

presentation = Presentation()
presentation.LoadFromFile(inputFile_2)

ppt1 = Presentation()
ppt1.LoadFromFile(inputFile_1)
slide1 = ppt1.Slides

index = 1
presentation.Slides.Insert(index, slide1)

presentation.SaveToFile(outputFile, FileFormat.Pptx2010)
presentation.Dispose()

Insert(1, slide1) 表示把来源文稿第一张插到目标文稿第二页的位置,原有页面依次后移。追加用 AppendBySlide,定点插入用 Insert。

批量合并文件夹中的演示文稿
把追加逻辑放进循环,就能按文件名顺序合并目录下所有 .pptx。先排序,确保页序稳定可预期;每份源文稿用完立即 Dispose(),降低内存占用。

import os
from spire.presentation.common import *
from spire.presentation import *

ppt_dir = "./Demos/Data/Ppts"
outputFile = "MergedAll.pptx"

files = sorted(f for f in os.listdir(ppt_dir) if f.lower().endswith(".pptx"))

result = Presentation()
result.LoadFromFile(os.path.join(ppt_dir, files))

for file_name in files:
    source = Presentation()
    source.LoadFromFile(os.path.join(ppt_dir, file_name))
    for slide in source.Slides:
      result.Slides.AppendBySlide(slide)
    source.Dispose()

result.SaveToFile(outputFile, FileFormat.Pptx2013)
result.Dispose()
print(f"已合并 {len(files)} 份演示文稿。")

这里用 sorted 保证合并顺序。若只需要其中几页,可在循环里加索引筛选,把要选的幻灯片逐张追加。

工程细节与检查建议
区分追加与插入:整份文件合并用 AppendBySlide 循环;控制中间位置用 Slides.Insert(index, slide)。新文稿先 RemoveAt(0) 删除默认页。来源文稿任意页可用 Slides 精确取得。大批量合并时,每份源文稿处理完立即 Dispose();文件特别多时分批处理更稳妥。合并后不同来源的主题、字体可能不一致,建议在 PowerPoint 中检查版式,必要时统一应用母版。

总结:掌握 Slides 集合的追加与插入操作后,多人章节汇总、按听众裁剪、批量归档都可以用脚本完成。实际项目中先明确页序规则,再决定追加还是插入,最后检查版式。

热心网友2 发表于 2026-9-22 19:00:00

Re: Python合并PPT:幻灯片追加插入与批量处理

写得挺实用的,AppendBySlide 和 Insert 的分工讲得很清楚。有个小地方想提醒一下:挑选幻灯片合并那段的循环里,AppendBySlide 的参数写成了 ppt1.Slides,按正文说明它应该接收单张幻灯片对象,这里大概率是笔误,改成 unusedItem 或 ppt1.Slides 应该才对吧。另外批量合并最后保存那行好像没贴完整,FileFormat 后面补上 Pptx2013 之类的格式就完整了。整体思路很清晰,RemoveAt(0) 避免空白页、用完及时 Dispose 这些细节都挺有帮助。

热心网友5 发表于 2026-9-22 19:10:00

Re: Python合并PPT:幻灯片追加插入与批量处理

这个教程挺清楚的,整体追加、定点插入、批量合并三个场景都给了可复现的代码,尤其是新建文稿先 RemoveAt(0) 和批量时排序、及时 Dispose 这些细节很实用。看代码时发现“挑选幻灯片合并到新文稿”那段循环里,for 里拿到的是 unusedItem,但 AppendBySlide 传的是 ppt1.Slides,这和前面说的接收单张幻灯片对象不太一致,是不是应该传当前 slide 或 ppt1.Slides?另外如果批量合并目录里没有 pptx,files 可能会出问题,加个空列表判断会更稳。保存格式 Pptx2013 和 Pptx2010 对最终效果影响大吗?感谢分享,收藏了。

热心网友1 发表于 2026-9-22 19:20:00

Re: Python合并PPT:幻灯片追加插入与批量处理

感谢分享,整体很实用。AppendBySlide 和 Insert 的区别讲得很直观,新建文稿先 RemoveAt(0) 这个坑也提醒得好;批量合并里先 sorted 再逐个 Dispose 的思路很稳。就是“挑选幻灯片合并到新文稿”那段循环里,AppendBySlide(ppt1.Slides) 看起来像是笔误,按前面的说明它应该接收单张 slide,写成 AppendBySlide(unusedItem) 或直接用 for slide in ppt1.Slides: AppendBySlide(slide) 更一致。还有最后批量合并的 SaveToFile 似乎没贴完,FileFormat 参数缺了后半截。另外如果目录下没有 pptx,files 会越界,实际用的时候可以加个判断。感谢整理,收藏了。
页: [1]
查看完整版本: Python合并PPT:幻灯片追加插入与批量处理