Home » Python » python-pptxの使い方 » python-pptxでプレースホルダーの文字列を抽出する

python-pptxでプレースホルダーの文字列を抽出する

動作検証バージョン:Windows 10 + Python 3.7.3 + python-pptx 0.6.18

python-pptxを使えば、PowerPoint VBAよりもシンプルなコードで文字列を抽出できることをご紹介しました。

プレースホルダーの文字列抽出も、PowerPoint VBAよりシンプルなコードで済みます。

[スポンサードリンク]

python-pptxでプレースホルダーのテキストを抽出するサンプル

以下のスクリプトで、Cドライブtempフォルダーに存在するfoo.pptxの、プレースホルダーの文字列を取得・printできます。

import pptx

prs = pptx.Presentation('C:\\temp\\foo.pptx')

for i, sld in enumerate(prs.slides, start=1):
    print(f'-- {i} --')
    for shp in sld.placeholders:
        if shp.has_text_frame:
            print(shp.text)

実は、全図形からの文字列抽出と、ほとんど同じです。
全図形からの文字列抽出で、
      print(f'-- {i} --')
      for shp in sld.shapes:
だった部分が、
      print(f'-- {i} --')
      for shp in sld.placeholders:
になっているだけです。

Slide.shapesとSlide.placeholdersの違い

Slideオブジェクトのshapes属性が、SlideShapesオブジェクトを返すのに対し、
>>> type(sld.shapes)
<class 'pptx.shapes.shapetree.SlideShapes'>

placeholders属性は、SlidePlaceholdersオブジェクトを返します。
>>> type(sld.placeholders)
<class 'pptx.shapes.shapetree.SlidePlaceholders'>

PowerPoint VBAとの比較

PowerPoint VBAの場合、プレースホルダーの文字列を取得するには、
  Shapes
   └ Placeholders
     └ Shape
       └ TextFrame
         └ TextRange
           └ Text
といった階層を辿らなければなりません。

python-pptxのほうが、はるかにシンプルなコードで済んでしまいます。

python-pptxで深い階層を辿る場合

上記スクリプトの、
    print(f'-- {i} --')
    for shp in sld.placeholders:
        if shp.has_text_frame:
            print(shp.text)
の部分は、以下のような書き方もできます。
    print(f'-- {i} --')
    for shp in sld.shapes.placeholders:
        if shp.has_text_frame:
            print(shp.text_frame.text)

PowerPoint VBAの深い階層構造に、近づけた書き方です。

最終更新日時:2019-11-09 10:47

[スポンサードリンク]

Home » Python » python-pptxの使い方 » python-pptxでプレースホルダーの文字列を抽出する

「python-pptxの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.