如何使用python-pptx删除未填充的占位符项目

16

这很简单,但我在文档或其他地方都找不到实际的方法。

我正在使用python-pptx模块,我只需要删除一些幻灯片上的一个单独的占位符项——一个空文本框(而不必为这些幻灯片创建一个全新的布局)——最接近答案的是这里:http://python-pptx.readthedocs.io/en/latest/user/placeholders-understanding.htmlUnpopulated vs. populated下面,但它仍然没有说明如何实际删除/移除占位符。

我已尝试了所有明显的方法,例如.delete()、.remove()等。

2个回答

18

目前没有API支持此功能,但是如果您删除文本框形状元素,应该可以解决问题。操作类似于这样:

textbox = shapes[textbox_idx]
sp = textbox.element
sp.getparent().remove(sp)

在执行此操作后,使用textbox变量/引用可能会出现问题。但除此之外,我认为这将解决问题。


1
太好了 - 我只需要稍微修改你给的内容:textbox = slide.shapes[textbox_idx]其中,slide 根据幻灯片变量名称而变化。谢谢! - Jacristi
嘿,我知道这个问题有点老了,但我很好奇是否有可用的功能可以打开或关闭文本的全大写模式。根据http://python-pptx.readthedocs.io/en/latest/user/text.html,我能够做到其他所有事情,比如加粗、斜体、下划线等等。同样在这个页面上提到了可以做到这一点的能力,但我无法找到它的任何地方。 - Jacristi
@Jacristi:你应该将这个问题作为一个独立的新问题来提出。它与这个主题无关。如果你在标签中加上“python-pptx”,我会看到它并很乐意回答。 - scanny

1

这是对scanny在文档中helloworld示例回答的跟进。代码删除了字幕占位符,该占位符在此情况下为空。

from pptx import Presentation

prs = Presentation()

title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)

title = slide.shapes.title
title.text = "Hello, World!"

subtitle = slide.placeholders[1]
sp = subtitle.element
sp.getparent().remove(sp)

prs.save('test.pptx')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接