为什么用脚本合并 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[i])
- ppt.Slides.AppendBySlide(ppt2.Slides[1])
- ppt.SaveToFile(outputFile, FileFormat.Pptx2013)
- ppt.Dispose()
复制代码 ppt2.Slides[1] 只取第二张。配合多个来源的追加顺序,可以自由编排新文稿页面。
插入到指定位置
如果要把幻灯片插进已有文稿中间,用 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[0]
- 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[0]))
- for file_name in files[1:]:
- 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 集合的追加与插入操作后,多人章节汇总、按听众裁剪、批量归档都可以用脚本完成。实际项目中先明确页序规则,再决定追加还是插入,最后检查版式。 |