如何从幻灯片中读取页脚并将其存储为String

时间:2019-05-09 14:07:34

标签: python-3.x python-pptx

我想使用python(python-pptx)从ppt读取所有页脚并将其存储在不同的Strings中。该文档没有太大帮助。有人可以帮我吗?

    >> slide_placeholders = slide.placeholders
    >> len(slide.placeholders)
       4

    >> slide.placeholders[4]
       KeyError...

我期望得到页脚对象并以某种方式读取它。

1 个答案:

答案 0 :(得分:0)

Slide.placeholders返回一个_SlidePlaceholders对象,该对象具有不寻常的语义,因为标识占位符可能很棘手。如上所用,它具有dict语义,其键为占位符的idx属性的值。 idx属性由创建幻灯片的 slide-layout 决定,因此,它是其占位符形状的来源。这些idx值本质上是任意的,并且不能保证是连续的。

您可以像这样发现idx值:

for placeholder in slide.placeholders:
    print(placeholder.placeholder_format.idx)

现在的问题是:“我想要哪个占位符?”

有一些策略:

  1. 标识idx 值::由同一幻灯片布局形成的两张不同幻灯片上的特定占位符将具有相同的{{1 }}值。如果您发现idx的值,则使用idx是一个好方法。请注意,这是slide.placeholders[idx](键)查找,而不是dict(偏移量)查找。

  2. 按占位符类型标识:占位符有不同的类型。 https://python-pptx.readthedocs.io/en/latest/api/enum/PpPlaceholderType.html#ppplaceholdertype。如果您想要的是幻灯片上该类型的唯一类型,则可以使用

list
  1. 按z顺序查找:这通常不是绝对可靠的,因为形状可以按z顺序轻松地前后移动,但是出于完整性考虑,请说您认为您的形状是最后一个(最高)占位符:
 from pptx.enum.shapes import PP_PLACEHOLDER

 def find_placeholder():
     for placeholder in slide.placeholders:
         if p.placeholder_format.type == PP_PLACEHOLDER.FOOTER:
             return placeholder
     print("not found")