我正在尝试合并powerpoint幻灯片,但我不确定如何操作。我发现一个python moduel pptx看起来很有前途。我尝试将幻灯片内容从两个电源点复制到一个新的电源点。但我遇到了许多问题,比如如何抓取现有幻灯片的布局或形状(包括图片、自动形状等所有形状)的高度、宽度和位置。我在Python-pptx: copy slide上查看了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
预期的结果是两张单独的幻灯片合并成一张幻灯片。
发布于 2021-03-23 02:48:37
我能够通过使用python和win32com.client来解决这个问题,也许这并不是你需要的,因为它会启动Microsoft Powerpoint,并将幻灯片从输入文件复制并粘贴到输出文件中。然后关闭PowerPoint应用程序。如果这个方法对你有效,这里是我对另一个问题的回答的link。
发布于 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的开发者布道者。
# 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))
https://stackoverflow.com/questions/60849601
复制相似问题