是否可以使用python pptx组合两个或多个PowerPoint?

是否可以使用python pptx组合两个或多个PowerPoint?,python,python-pptx,Python,Python Pptx,我正在尝试合并powerpoint幻灯片,但我不知道如何合并。我发现了一个看起来很有前途的python moduel pptx。我尝试将幻灯片内容从两个PowerPoint复制到一个新的PowerPoint。但我遇到了很多问题,比如如何抓住现有幻灯片的布局或形状(所有形状包括图片、自动形状等)高度、宽度和位置。我在上查看了python pptx示例。我试过做类似的事情,但没有用 这是我的密码: from pptx import Presentation prs1 = Presentation(

我正在尝试合并powerpoint幻灯片,但我不知道如何合并。我发现了一个看起来很有前途的python moduel pptx。我尝试将幻灯片内容从两个PowerPoint复制到一个新的PowerPoint。但我遇到了很多问题,比如如何抓住现有幻灯片的布局或形状(所有形状包括图片、自动形状等)高度、宽度和位置。我在上查看了python pptx示例。我试过做类似的事情,但没有用

这是我的密码:

from pptx import Presentation

prs1 = Presentation("C:/Users/number/Documents/Test1.pptx")
prs2 = Presentation("C:/Users/number/Documents/Test2.pptx")

slidelst = []
for layout in prs2.slide_layouts:
    slidelst.append(prs1.slides.add_slide(layout))

index = 0
for slide in slidelst:
    for shape in prs2.slides[prs2.slides.index(slide)].shapes:
        slide.shapes._spTree.insert_element_before(shape.element, 'p:extLst')
    index+=1

prs1.save("C:/Users/I505168/Documents/newpresentation.pptx")
我得到一个错误:

Traceback (most recent call last):
  File "C:\Users\I505168\Desktop\testpptx.py", line 12, in <module>
    for shape in prs2.slides[prs2.slides.index(slide)].shapes:
  File "C:\Users\I505168\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\slide.py", line 315, in index
    raise ValueError("%s is not in slide collection" % slide)
ValueError: <pptx.slide.Slide object at 0x03B53A50> is not in slide collection
回溯(最近一次呼叫最后一次):
文件“C:\Users\I505168\Desktop\testpptx.py”,第12行,在
对于prs2.幻灯片中的形状[prs2.幻灯片.索引(幻灯片)]。形状:
索引中第315行的文件“C:\Users\I505168\AppData\Local\Programs\Python\Python37-32\lib\site packages\pptx\slide.py”
提升值错误(“%s”不在幻灯片集合“%s”中)
ValueError:不在幻灯片集合中

预期的结果是两张单独的幻灯片合并为一张幻灯片。

我使用python和win32com.client解决了这个问题,可能这不是您需要的,因为它启动Microsoft Powerpoint并将幻灯片从输入文件复制粘贴到输出文件。然后关闭PowerPoint应用程序。如果此方法对您有效,下面是我对另一个问题的答案。

另一个在python中组合PowerPoint演示文稿的解决方案是。它是一个REST API解决方案,不依赖任何第三方应用程序/工具。目前,它结合了来自云存储的文件(GroupDocs内部存储、Amazon S3、DropBox、Google驱动器存储、Google云存储、Windows Azure存储和FTP存储)。但是,我们计划在不久的将来合并来自请求主体(流)的文件

附言:我是GroupDocs的开发者布道者

# Import module
import groupdocs_merger_cloud
from shutil import copyfile

# Get your client Id and Secret at https://dashboard.groupdocs.cloud (free registration is required).
clientid = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
clientsecret = "xxxxxxxxxxxxxxxxxxxxxxxxx"

# Create instance of the API
documentApi = groupdocs_merger_cloud.DocumentApi.from_keys(clientid, clientsecret)
file_api = groupdocs_merger_cloud.FileApi.from_keys(clientid, clientsecret)

try:

    #upload source files to default storage
    filename1 = 'C:/Temp/test.pptx'
    remote_name1 = 'slides/test.pptx'
    filename2 = 'C:/Temp/three-slides.pptx'
    remote_name2 = 'slides/three-slides.pptx'

    output_name= 'slides/joined.pptx'


    request_upload1 = groupdocs_merger_cloud.UploadFileRequest(remote_name1,filename1)
    response_upload1 = file_api.upload_file(request_upload1)
    request_upload2 = groupdocs_merger_cloud.UploadFileRequest(remote_name2,filename2)
    response_upload2 = file_api.upload_file(request_upload2)
 
    item1 = groupdocs_merger_cloud.JoinItem()
    item1.file_info = groupdocs_merger_cloud.FileInfo(remote_name1)
    item2 = groupdocs_merger_cloud.JoinItem()
    item2.file_info = groupdocs_merger_cloud.FileInfo(remote_name2)
 
    options = groupdocs_merger_cloud.JoinOptions()
    options.join_items = [item1, item2]
    options.output_path = output_name
 
    result = documentApi.join(groupdocs_merger_cloud.JoinRequest(options))

        
    #Download Document from default Storage        
    request_download = groupdocs_merger_cloud.DownloadFileRequest(output_name)
    response_download = file_api.download_file(request_download)
       
    copyfile(response_download, 'C:/Temp/joined.pptx')
    print("Result {}".format(response_download))
        
except groupdocs_merger_cloud.ApiException as e:
        print("Exception when converting document: {0}".format(e.message))


你好我很想知道你是否找到了一种程序化的方法来实现这一点。目前不支持从其他演示文稿复制幻灯片@你解决问题了吗。如果是,您能分享解决方案吗