在 PowerPoint 中创建一个 `PicturePlaceholder` 并使用 Python-pptx 访问它
Creating a `PicturePlaceholder` in PowerPoint and accessing it with Python-pptx
我目前正在使用 python-pptx 制作 PowerPoint 模板。我在 MS Office 上创建了一个模板,并希望用文本和图像动态填充该模板。因此,我创建了包含占位符的布局和幻灯片。
我在访问和填充文本占位符时没有问题,但是,我在处理图片占位符时遇到了困难。
我想使用 PicturePlaceholder object. You can also find an example of this method in the documentation here 的 .insert_picture()
方法。
为此,我按如下方式访问我的占位符:
prs = Presentation(pathToPptxTemplate)
slide = prs.slides[indexOfMySlide]
# There are multiple image placeholders on my slide
image_placeholders = [
i for i in slide.placeholders if
i.placeholder_format.type == 18
]
for index, shape in enumerate(image_placeholders):
shape.insert_picture(pathToMyImage)
这会导致以下错误消息:
AttributeError: 'PlaceholderPicture' object has no attribute 'insert_picture'
挠头几分钟后,我注意到我正在查看 PicturePlaceholder
的文档,但访问的是 PlaceholderPicture
对象。我在文档中读到的区别是:
- PicturePlaceholder 是只能接受图片的占位符形状。
而
- PlaceholderPicture 是用图片填充的占位符形状。
现在我还没有用任何图片填充占位符。我刚刚在 PowerPoint 中创建了一个空的占位符。
所以这是我的问题:
如何在 PowerPoint 中创建 PicturePlacholder 以及如何使用 Python-pptx 访问它?
如果这不可行,您有其他解决方案吗?
提前致谢
尝试删除有问题的“占位符”形状并使用 PowerPoint UI 插入一个新的、未修改的占位符。在我使用 PowerPoint 2016 的 Mac 上,这是:
- 查看 > 幻灯片母版
- Select 所需的幻灯片布局
- 幻灯片母版 > 插入占位符 > 图片
您可以根据需要调整大小和位置,否则请保持不变,然后重试。可能最好用一个新的演示文稿来完成所有这些操作,并删除除一个幻灯片版式和所有幻灯片之外的所有内容,只是为了让事情简单化。
然后使用 python-pptx
从该布局创建幻灯片:
slide = prs.slides.add_slide(prs.slide_layouts[0])
我认为您会发现它有效,并且您的模板占位符可以通过某种方式插入图像,也许可以作为示例或其他内容。
几个可能的混淆区域:
用户没有在幻灯片上创建占位符形状。创建幻灯片时,幻灯片会继承其幻灯片版式的占位符。
PicturePlaceholder
形状具有元素 <p:sp>
,所有占位符也是如此。当图片“插入占位符”时,p:sp
元素将替换为 <p:pic>
元素;占位符形状替换为图片形状。
我想您会发现模板幻灯片上的图片占位符已被“使用”,现在是图片。您可以通过使用 print(shape.xml)
.
检查 xml 来确认这一点
解决方案是通过重新创建幻灯片来修复它,或者在 PowerPoint 中打开它并删除它的内容(不是整个形状)可能会 return 它应该恢复到原始图片占位符状态.也可以删除有问题的形状,然后“重新应用布局”(可能是“主页”工具栏的幻灯片布局区域中的“重置”)。
我目前正在使用 python-pptx 制作 PowerPoint 模板。我在 MS Office 上创建了一个模板,并希望用文本和图像动态填充该模板。因此,我创建了包含占位符的布局和幻灯片。
我在访问和填充文本占位符时没有问题,但是,我在处理图片占位符时遇到了困难。
我想使用 PicturePlaceholder object. You can also find an example of this method in the documentation here 的 .insert_picture()
方法。
为此,我按如下方式访问我的占位符:
prs = Presentation(pathToPptxTemplate)
slide = prs.slides[indexOfMySlide]
# There are multiple image placeholders on my slide
image_placeholders = [
i for i in slide.placeholders if
i.placeholder_format.type == 18
]
for index, shape in enumerate(image_placeholders):
shape.insert_picture(pathToMyImage)
这会导致以下错误消息:
AttributeError: 'PlaceholderPicture' object has no attribute 'insert_picture'
挠头几分钟后,我注意到我正在查看 PicturePlaceholder
的文档,但访问的是 PlaceholderPicture
对象。我在文档中读到的区别是:
- PicturePlaceholder 是只能接受图片的占位符形状。
而
- PlaceholderPicture 是用图片填充的占位符形状。
现在我还没有用任何图片填充占位符。我刚刚在 PowerPoint 中创建了一个空的占位符。
所以这是我的问题:
如何在 PowerPoint 中创建 PicturePlacholder 以及如何使用 Python-pptx 访问它?
如果这不可行,您有其他解决方案吗?
提前致谢
尝试删除有问题的“占位符”形状并使用 PowerPoint UI 插入一个新的、未修改的占位符。在我使用 PowerPoint 2016 的 Mac 上,这是:
- 查看 > 幻灯片母版
- Select 所需的幻灯片布局
- 幻灯片母版 > 插入占位符 > 图片
您可以根据需要调整大小和位置,否则请保持不变,然后重试。可能最好用一个新的演示文稿来完成所有这些操作,并删除除一个幻灯片版式和所有幻灯片之外的所有内容,只是为了让事情简单化。
然后使用 python-pptx
从该布局创建幻灯片:
slide = prs.slides.add_slide(prs.slide_layouts[0])
我认为您会发现它有效,并且您的模板占位符可以通过某种方式插入图像,也许可以作为示例或其他内容。
几个可能的混淆区域:
用户没有在幻灯片上创建占位符形状。创建幻灯片时,幻灯片会继承其幻灯片版式的占位符。
PicturePlaceholder
形状具有元素<p:sp>
,所有占位符也是如此。当图片“插入占位符”时,p:sp
元素将替换为<p:pic>
元素;占位符形状替换为图片形状。
我想您会发现模板幻灯片上的图片占位符已被“使用”,现在是图片。您可以通过使用 print(shape.xml)
.
解决方案是通过重新创建幻灯片来修复它,或者在 PowerPoint 中打开它并删除它的内容(不是整个形状)可能会 return 它应该恢复到原始图片占位符状态.也可以删除有问题的形状,然后“重新应用布局”(可能是“主页”工具栏的幻灯片布局区域中的“重置”)。