PowerPoint を使ってプレゼンテーションをするときに,原稿や関連情報を「発表者ノート」に書いておく人は多いと思う.最近 PowerPoint ファイルの「発表者ノート」を抽出して別のファイルにコピーする必要があった.具体的にはプロンプターに投影する原稿を作る必要があった.
ページ数が少なかったら地道にコピーしても良いけど,今回なんと「約100ページ」もあり,流石に作業効率が悪すぎた.そこで Python と python-pptx を使って,自動的に「発表者ノート」を抽出できるようにした.Python 3.8.5 と python-pptx v0.6.18 を前提にする.
サンプルコード
以下にサンプルコードを載せる.事前に 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
文のところ).
まとめ
最近 PowerPoint ファイルの「発表者ノート」を抽出して別のファイルにコピーする必要があった.作業効率も考えて Python と python-pptx を使って自動化した.python-pptx は他にも便利な機能があるので,また別の記事で紹介したいと思う.