查看: 274|回复: 0

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

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

环境准备
安装命令:
  1. pip install Spire.Presentation
复制代码

安装完成后导入模块:
  1. from spire.presentation.common import *
  2. from spire.presentation import *
复制代码

整体追加到另一份文稿末尾
分别加载目标文稿与源文稿,遍历源文稿全部幻灯片,逐张 AppendBySlide 到目标末尾。保存目标文稿,源文稿本身不受影响。
  1. from spire.presentation.common import *
  2. from spire.presentation import *
  3. inputFile_1 = "文档1.pptx"
  4. inputFile_2 = "文档2.pptx"
  5. outputFile = "ClonePPTAtEndOfAnother.pptx"
  6. destPPT = Presentation()
  7. destPPT.LoadFromFile(inputFile_2)
  8. sourcePPT = Presentation()
  9. sourcePPT.LoadFromFile(inputFile_1)
  10. for slide in sourcePPT.Slides:
  11.     destPPT.Slides.AppendBySlide(slide)
  12. destPPT.SaveToFile(outputFile, FileFormat.Pptx2013)
  13. destPPT.Dispose()
复制代码
AppendBySlide 接收一张幻灯片对象,把它复制追加到目标 Slides 集合末尾。for 循环遍历源 Slides,相当于把整份文件搬过去。保存格式这里用 FileFormat.Pptx2013。

挑选幻灯片合并到新文稿
新建 Presentation 后,它默认带一张空幻灯片,需要先 RemoveAt(0) 删除,否则成品开头会多出空白页。然后加载多个来源,按索引挑选追加。
  1. from spire.presentation.common import *
  2. from spire.presentation import *
  3. inputFile_1 = "文档1.pptx"
  4. inputFile_2 = "文档2.pptx"
  5. outputFile = "MergeSelectedSlides.pptx"
  6. ppt = Presentation()
  7. ppt.Slides.RemoveAt(0)
  8. ppt1 = Presentation()
  9. ppt1.LoadFromFile(inputFile_1)
  10. ppt2 = Presentation()
  11. ppt2.LoadFromFile(inputFile_2)
  12. for i, unusedItem in enumerate(ppt1.Slides):
  13.     ppt.Slides.AppendBySlide(ppt1.Slides[i])
  14. ppt.Slides.AppendBySlide(ppt2.Slides[1])
  15. ppt.SaveToFile(outputFile, FileFormat.Pptx2013)
  16. ppt.Dispose()
复制代码
ppt2.Slides[1] 只取第二张。配合多个来源的追加顺序,可以自由编排新文稿页面。

插入到指定位置
如果要把幻灯片插进已有文稿中间,用 Slides.Insert(index, slide)。它接受插入位置索引和幻灯片对象两个参数。
  1. from spire.presentation.common import *
  2. from spire.presentation import *
  3. inputFile_1 = "文档1.pptx"
  4. inputFile_2 = "文档2.pptx"
  5. outputFile = "CloneSlideToAnotherPPT.pptx"
  6. presentation = Presentation()
  7. presentation.LoadFromFile(inputFile_2)
  8. ppt1 = Presentation()
  9. ppt1.LoadFromFile(inputFile_1)
  10. slide1 = ppt1.Slides[0]
  11. index = 1
  12. presentation.Slides.Insert(index, slide1)
  13. presentation.SaveToFile(outputFile, FileFormat.Pptx2010)
  14. presentation.Dispose()
复制代码
Insert(1, slide1) 表示把来源文稿第一张插到目标文稿第二页的位置,原有页面依次后移。追加用 AppendBySlide,定点插入用 Insert。

批量合并文件夹中的演示文稿
把追加逻辑放进循环,就能按文件名顺序合并目录下所有 .pptx。先排序,确保页序稳定可预期;每份源文稿用完立即 Dispose(),降低内存占用。
  1. import os
  2. from spire.presentation.common import *
  3. from spire.presentation import *
  4. ppt_dir = "./Demos/Data/Ppts"
  5. outputFile = "MergedAll.pptx"
  6. files = sorted(f for f in os.listdir(ppt_dir) if f.lower().endswith(".pptx"))
  7. result = Presentation()
  8. result.LoadFromFile(os.path.join(ppt_dir, files[0]))
  9. for file_name in files[1:]:
  10.     source = Presentation()
  11.     source.LoadFromFile(os.path.join(ppt_dir, file_name))
  12.     for slide in source.Slides:
  13.         result.Slides.AppendBySlide(slide)
  14.     source.Dispose()
  15. result.SaveToFile(outputFile, FileFormat.Pptx2013)
  16. result.Dispose()
  17. print(f"已合并 {len(files)} 份演示文稿。")
复制代码
这里用 sorted 保证合并顺序。若只需要其中几页,可在循环里加索引筛选,把要选的幻灯片逐张追加。

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-22 15:24 , Processed in 0.023618 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部