0

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

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

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

我试过使用 python-pptx 库。但是文档指出:

“在一般情况下,将一张幻灯片从一个演示文稿复制到另一个演示文稿是相当困难的,因此在更多的积压工作被烧掉之前,这可能不会发生。”

我希望像下面这样的东西会起作用 -

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')

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

4

3 回答 3

0

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

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

PS:我是 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))
于 2021-04-16T19:48:30.630 回答
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)

于 2021-03-22T18:38:29.000 回答
-2

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

于 2017-11-08T13:08:17.313 回答