『できる 仕事がはかどるPython自動処理 全部入り。』のChapter 8「テキストデータの処理」に、python-pptxを使って、既存のプレゼンテーションファイルから、テキストを抽出するサンプルが掲載されています。
Shapeオブジェクトの、TextFrameオブジェクトの、_Paragraphオブジェクトの、text属性でテキストを取得するスクリプトです。
(PowerPointファイルからのテキスト抽出の前に掲載されている)Word文書からテキストを抽出するサンプルと似た形にするためと、python-pptxを使ってPowerPointファイルを作成するケースも視野に入れて、この階層を辿るサンプルになっているのかなと想像しています。
単純に文字列を抽出するだけならば、もう少しシンプルなコードで済みそうなので試してみました。
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.shapes:
if shp.has_text_frame:
print(shp.text)
python-pptxではShapeからtextを取得できる
PowerPoint VBAの場合、Shape内の文字列を取得するには、
Shape
└ TextFrame
└ TextRange
└ Text
という階層を必ず辿る必要があります。
これに対しpythhon-pptxの場合には、Shapeオブジェクトのtextで、いきなり図形内の文字列を取得できます。
PowerPointファイル内の文字列を抜き出すだけなら、PowerPoint VBAよりもpython-pptxを使うほうが、楽に済みそうです。Pythonを使える方なら。
enumerate関数の初期値
enumerate関数で、連番を簡単に作れるのもPythonの便利なところです。
『できる 仕事がはかどるPython自動処理 全部入り。』のp.205では初期値を設定していませんが、スライド番号なら0からよりも、1から表示されるほうが良さそうに感じますので、上記のSubプロシージャでは初期値1を設定しています。
for i, sld in enumerate(prs.slides, start=1):
print(f'-- {i} --')
最終更新日時:2020-08-14 14:36
Home » Python » python-pptxの使い方 » python-pptxで文字列を抽出する