如何将两个演示文稿(pptx)合并为一个主演示文稿?

时间:2017-09-13 19:27:56

标签: python vba powerpoint python-pptx

我是项目团队的一员,他们创建了PPTX演示文稿以呈现给客户。创建所有文件后,我们需要为每个演示文稿添加其他幻灯片。每个演示文稿中的所有新幻灯片都是相同的。

以编程方式完成此操作的最佳方法是什么?

我不想使用VBA,因为(据我所知)我必须打开每个演示文稿来运行脚本。

我尝试过使用python-pptx库。但文档说明:

&#34;将幻灯片从一个演示文稿复制到另一个演示文稿在一般情况下很难做到,因此在更多的积压工作被烧毁之前可能不会发生。&#34; < / p>

我希望以下内容能起作用 -

from pptx import Presentation

main = Presentation('Universal.pptx')
abc = Presentation('Test1.pptx')

main_slides = main.slides.get(1)
abc_slides = abc.slides.get(1)

full = main.slides.add_slide(abc_slides[1])

full.save('Full.pptx')

有没有人有成功做过这样的事情?

3 个答案:

答案 0 :(得分:0)

一个名为“powerpoint join”的免费工具可以帮助您。

答案 1 :(得分:0)

我能够通过使用 python 和 win32com.client 来实现这一点。然而,这并不安静。我的意思是它启动 Microsoft PowerPoint 并一个一个打开输入文件,然后从输入文件中复制所有幻灯片并循环粘贴到输出文件中。

import win32com.client
from os import walk

def mergePresentations(inputFileNames, outputFileName):

    Application = win32com.client.Dispatch("PowerPoint.Application")
    outputPresentation = Application.Presentations.Add() 
    outputPresentation.SaveAs(outputFileName)

    for file in inputFileNames:    
        currentPresentation = Application.Presentations.Open(file)
        currentPresentation.Slides.Range(range(1, currentPresentation.Slides.Count+1)).copy()
        Application.Presentations(outputFileName).Windows(1).Activate()    
        outputPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")    
        currentPresentation.Close()

    outputPresentation.save()
    outputPresentation.close()
    Application.Quit()

# Example; let's say you have a folder of presentations that need to be merged 
#           to new file named "allSildesMerged.pptx" in the same folder

path,_,files = next(walk('C:\\Users\\..\\..\\myFolder'))
outputFileName = path + '\\' + 'allSildesMerged.pptx'

inputFiles = []
for file in files:
    inputFiles.append(path + '\\' + file)

mergePresentations(inputFiles, outputFileName)

答案 2 :(得分:0)

GroupDocs.Merger REST API 也是将多个 PowerPoint 演示文稿合并为一个文档的另一个选项。它是付费 API,但每月提供 150 次免费 API 调用。

目前,它支持与云提供商合作:Amazon S3、DropBox、Google Drive Storage、Google Cloud Storage、Windows Azure Storage、FTP Storage 以及 GroupDocs 内部云存储。但是,在不久的将来,它计划支持来自请求正文(流)的合并文件。

P.S:我是 GroupDocs 的开发人员布道师。

# For complete examples and data files, please go to https://github.com/groupdocs-merger-cloud/groupdocs-merger-cloud-python-samples
# Get Client ID and Client Secret from https://dashboard.groupdocs.cloud
client_id = "XXXX-XXXX-XXXX-XXXX" 
client_secret = "XXXXXXXXXXXXXXXX"
  
documentApi = groupdocs_merger_cloud.DocumentApi.from_keys(client_id, client_secret)
 
item1 = groupdocs_merger_cloud.JoinItem()
item1.file_info = groupdocs_merger_cloud.FileInfo("four-slides.pptx")
item2 = groupdocs_merger_cloud.JoinItem()
item2.file_info = groupdocs_merger_cloud.FileInfo("one-slide.docx")
 
options = groupdocs_merger_cloud.JoinOptions()
options.join_items = [item1, item2]
options.output_path = "Output/joined.pptx"
 
result = documentApi.join(groupdocs_merger_cloud.JoinRequest(options))