python-pptxを使えば、PowerPoint VBAよりもシンプルなコードで文字列を抽出できることをご紹介しました。
プレースホルダーの文字列抽出も、PowerPoint VBAよりシンプルなコードで済みます。
python-pptxでプレースホルダーのテキストを抽出するサンプル
以下のスクリプトで、Cドライブtempフォルダーに存在するfoo.pptxの、プレースホルダーの文字列を取得・printできます。
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)placeholders属性は、SlidePlaceholdersオブジェクトを返します。
<class 'pptx.shapes.shapetree.SlideShapes'>
>>> 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)
の部分は、以下のような書き方もできます。
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でプレースホルダーの文字列を抽出する