首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以使用python-pptx组合两个或多个powerpoint吗?

可以使用python-pptx组合两个或多个powerpoint吗?
EN

Stack Overflow用户
提问于 2020-03-25 21:13:17
回答 2查看 2.4K关注 0票数 4

我正在尝试合并powerpoint幻灯片,但我不确定如何操作。我发现一个python moduel pptx看起来很有前途。我尝试将幻灯片内容从两个电源点复制到一个新的电源点。但我遇到了许多问题,比如如何抓取现有幻灯片的布局或形状(包括图片、自动形状等所有形状)的高度、宽度和位置。我在Python-pptx: copy slide上查看了python-pptx示例。我试着做一些类似的事情,但这不起作用。

下面是我的代码:

代码语言:javascript
运行
复制
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")

我得到了错误:

代码语言:javascript
运行
复制
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

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

EN

回答 2

Stack Overflow用户

发布于 2021-03-23 02:48:37

我能够通过使用python和win32com.client来解决这个问题,也许这并不是你需要的,因为它会启动Microsoft Powerpoint,并将幻灯片从输入文件复制并粘贴到输出文件中。然后关闭PowerPoint应用程序。如果这个方法对你有效,这里是我对另一个问题的回答的link

票数 2
EN

Stack Overflow用户

发布于 2021-04-23 03:04:06

在python中组合PowerPoint表示的另一个解决方案是GroupDocs.Merger Cloud SDK for Python。它是一个REST API解决方案,不依赖于任何第三方应用程序/工具。目前,它结合了云存储(GroupDocs内部存储、亚马逊S3、DropBox、Google Drive Storage、Google Cloud Storage、Windows Azure storage和FTP Storage )中的文件。但是,我们计划在不久的将来合并来自请求体(流)的文件。

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

代码语言:javascript
运行
复制
# 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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60849601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档