kakakakakku blog

Weekly Tech Blog: Keep on Learning!

python-pptx を使って PowerPoint ファイルの「発表者ノート」を抽出する

PowerPoint を使ってプレゼンテーションをするときに,原稿や関連情報を「発表者ノート」に書いておく人は多いと思う.最近 PowerPoint ファイルの「発表者ノート」を抽出して別のファイルにコピーする必要があった.具体的にはプロンプターに投影する原稿を作る必要があった.

f:id:kakku22:20200905001414p:plain

ページ数が少なかったら地道にコピーしても良いけど,今回なんと「約100ページ」もあり,流石に作業効率が悪すぎた.そこで Pythonpython-pptx を使って,自動的に「発表者ノート」を抽出できるようにした.Python 3.8.5python-pptx v0.6.18 を前提にする.

github.com

サンプルコード

以下にサンプルコードを載せる.事前に pip install もしくは requirements.txt を使って python-pptx をインストールしておけば,すぐに試せる.今回は同じディレクトリに置いてある example.pptx から「スライドタイトル」「発表者ノート」を抽出する.たった9行!

from pptx import Presentation

presentation = Presentation('example.pptx')

for slide in presentation.slides:
    if slide.has_notes_slide and slide.notes_slide.notes_text_frame.text:
        print(slide.shapes.title.text)
        print(slide.notes_slide.notes_text_frame.text)
        print('-----')

動作確認

実際に上に載せたサンプルの PowerPoint ファイル example.pptx を使ってサンプルコードを実行する.期待した通り「スライドタイトル」「発表者ノート」を抽出できた.これは便利!

$ python note.py
slide title 1
a
bb
ccc
dddd
eeeee
-----
slide title 2
f
gg
hhh
iiii
jjjjj
-----

python-pptx 紹介

python-pptx を使うと,Python で PowerPoint ファイルを自由に編集できる.機能はたくさんあるけど,今回は大きく以下の API を使った.「スライドタイトル」を抽出する場合は slide.shapes.title.text のように書く.「発表者ノート」を抽出する場合は slide.notes_slide.notes_text_frame.text のように書く.読みやすいとは思う.

  • Presentation オブジェクト
  • Slides オブジェクト
  • Slide オブジェクト

なお,Slide オブジェクトで使える has_notes_slide() メソッドは「発表者ノート」の有無を True/False で返す.新しく作ったスライドだと,ちゃんと False になるけど,1度書いた後に消すと True になってしまったりして,期待した動きにならなかった.今回のサンプルコードでは「発表者ノート」として抽出した文字列のブランク判定も含めている(if 文のところ).

python-pptx.readthedocs.io

まとめ

最近 PowerPoint ファイルの「発表者ノート」を抽出して別のファイルにコピーする必要があった.作業効率も考えて Pythonpython-pptx を使って自動化した.python-pptx は他にも便利な機能があるので,また別の記事で紹介したいと思う.