2

抱歉,我一直在寻找解决方案,但找不到足够的文档来解决这个问题。我正在尝试导入学校所需的默认幻灯片布局,它有一个特殊的背景和一个标题块和一个字幕块。我假设当我导入这个时,python-pptx 会自动为这两个文本块创建占位符 0 和 1,但是当我尝试编辑占位符时,我得到一个属性错误:

AttributeError: 'Presentation' object has no attribute 'placeholders'

我的代码如下:

from pptx import Presentation
prs = Presentation('SeniorDesignTitleSlide.pptx')

Presentation_Title = prs.placeholders[0]
Presentation_Subtitle = prs.placeholders[1]
Presentation_Title.text = 'This Is a Test'
Presentation_Subtitle.text = 'Is This Working?'

prs.save('SlideLayoutImportTest.pptx')

编辑[0]:​​我确实意识到我只是在打开那个特定的演示文稿,但是我如何访问和编辑其中的单张幻灯片?

编辑[1]:我从 2015 年发现了一些关于 python-pptx 扩展此功能的帖子,但没有进一步的信息表明它实际发生了。

python-pptx如何为导入的幻灯片布局分配占位符?或者它甚至会这样做吗?它需要是 .potx 文件吗?

先感谢您。

4

1 回答 1

8

占位符属于幻灯片对象,而不是演示对象。因此,第一件事是拿到一张幻灯片。

幻灯片是从幻灯片布局创建的,它本质上是克隆它以获得一些起始形状,包括在许多情况下的占位符。

所以第一步是弄清楚你想要哪种幻灯片布局。最简单的方法是打开“开始”演示文稿(有时称为“模板”演示文稿)并使用“视图”>“母版”>“幻灯片母版...”菜单选项检查它的幻灯片母版和布局。

找到你想要的那个,从第一个布局开始倒数,从 0 开始,这会给你那个幻灯片布局的索引

然后你的代码看起来像这样:

from pptx import Presentation

prs = Presentation('SeniorDesignTitleSlide.pptx')

slide_layout = prs.slide_layouts[0]  # assuming you want the first one
slide = prs.slides.add_slide(slide_layout)

Presentation_Title = slide.placeholders[0]
Presentation_Subtitle = slide.placeholders[1]
Presentation_Title.text = 'This Is a Test'
Presentation_Subtitle.text = 'Is This Working?'

prs.save('SlideLayoutImportTest.pptx')

就索引访问而言,集合的placeholders行为类似于 a dict,因此在您的情况下,用作上述索引的 0 和 1 不太可能完全匹配(尽管 0 可能会起作用;标题始终为 0)。

该文档页面解释了如何发现您的模板可用的索引:http: //python-pptx.readthedocs.io/en/latest/user/placeholders-using.html

之前的页面有更多关于占位符概念的信息:http: //python-pptx.readthedocs.io/en/latest/user/placeholders-understanding.html

于 2017-11-23T04:07:22.670 回答