在PowerPoint中创建“PicturePlaceholder”并使用Python pptx访问它

在PowerPoint中创建“PicturePlaceholder”并使用Python pptx访问它,python,python-pptx,Python,Python Pptx,我目前正在使用制作PowerPoint模板。我已在MS Office上创建了一个模板,并希望使用文本和图像动态填充模板。因此,我创建了包含占位符的布局和幻灯片 我在访问和填充文本占位符方面没有问题,但是,我正在努力使用图片占位符 我想使用的.insert_图片方法。您还可以在文档中找到此方法的示例 为此,我访问我的占位符如下: prs=PresentationpathToPptxTemplate 幻灯片=prs.幻灯片[indexOfMySlide] 我的幻灯片上有多个图像占位符 图像\u占位符

我目前正在使用制作PowerPoint模板。我已在MS Office上创建了一个模板,并希望使用文本和图像动态填充模板。因此,我创建了包含占位符的布局和幻灯片

我在访问和填充文本占位符方面没有问题,但是,我正在努力使用图片占位符

我想使用的.insert_图片方法。您还可以在文档中找到此方法的示例

为此,我访问我的占位符如下:

prs=PresentationpathToPptxTemplate 幻灯片=prs.幻灯片[indexOfMySlide] 我的幻灯片上有多个图像占位符 图像\u占位符=[ 幻灯片中的i为i。如果 i、 占位符_format.type==18 ] 对于索引,枚举图像中的形状\u占位符: shape.insert_picturepathToMyImage 这将导致以下错误消息:

AttributeError: 'PlaceholderPicture' object has no attribute 'insert_picture'
在搔了几分钟的头之后,我注意到我正在查看PicturePlaceholder的文档,但正在访问一个占位符图片对象。我在文档中看到的区别是:

PicturePlaceholder是只能接受图片的占位符形状。 鉴于

占位符图片是用图片填充的占位符形状。 现在我还没有用任何图片填充占位符。我刚刚在PowerPoint中创建了一个空占位符

所以我的问题是: 如何在PowerPoint中创建PicturePlaceHolder,以及如何使用Python pptx访问它

如果不可能,您是否有其他解决方案


提前感谢

尝试删除有问题的占位符形状,并使用PowerPoint UI插入一个新的未触及占位符。在使用PowerPoint 2016的Mac上,这是:

视图>幻灯片母版 选择所需的幻灯片布局 幻灯片母版>插入占位符>图片 如果需要,您可以调整大小和位置,但其他情况下请保持不变,然后重试。也许最好用一个新的演示文稿来完成这一切,删除除一张幻灯片外的所有幻灯片布局和所有幻灯片,以保持简单

然后使用python pptx从该布局创建幻灯片:

slide = prs.slides.add_slide(prs.slide_layouts[0])
我想你会发现这是可行的,有一种方式,你的模板占位符已经插入了一个图像,也许是作为一个例子或什么的

几个可能的混淆区域:

用户不会在幻灯片上创建占位符形状。创建幻灯片时,幻灯片将继承其幻灯片布局的占位符

PicturePlaceholder形状与所有占位符一样具有该元素。将图片插入占位符时,p:sp元素将替换为元素;占位符形状将替换为图片形状

我想您会发现,模板幻灯片上的图片占位符已经被使用,现在是一张图片。您可以通过使用printshape.xml检查xml来确认这一点


解决方案是通过重新创建幻灯片来修复该幻灯片,或者在PowerPoint中打开幻灯片并删除其内容,而不是删除整个形状,从而使其恢复到原始图片占位符状态。删除有问题的形状,然后在主工具栏的“幻灯片布局”区域重新应用布局(可能会重置),也可能有效。

非常感谢您的回答。我非常感谢您在GitHub和stackoverflow上如此积极地帮助我们解决这个问题:-