Pythonは様々なライブラリを組み合わせて、多様な作業をプログラミングできます。pptxファイル(PowerPointのファイル)の作成も、またできます。python-pptxはこれを実現します。
python-pptx — python-pptx 0.6.17 documentation
何ができるかはpptxファイルの構造を知ると少しわかりやすいです。pptxファイルはその実zipファイルと同じ形式です。pptxをzipに変えると例えば、次の様になります。
解凍に成功しました。pptxファイルとは特定のファイル構造のファイル群を圧縮したzipファイルのことであり、zipファイル⊃pptxファイルとなっているわけです。この中から、どのページに、どのテンプレートが使われて、テンプレート中のある空欄に、何が、どう埋まっているか、が読み取れます。python-pptxではこの構造の指定に従ってページを構成していきます。
テンプレート構造から細かく作っていく方法はGUIからpptxを作る場合、おそらくあまりしないでしょう。必然python-pptxは普段使いからかけ離れた理解の難しいものになります。そういった際にはpython-pptxを用いたhogehogeな関数を作った、というwebページを探すとよいでしょう。わかりやすいです。
python-pptxは例えば、次の様に記述できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | from pptx import Presentation import datetime from glob import glob from pptx.util import Pt def makeManual(): prs = Presentation( 'template.pptx' ) prs = addContentPage( prs, '検索画面使用方法' , '上部の検索ボックスに検索対象の語を入力し、検索ボタンを押すことで検索ができます。\nいずれの検索画面でも同様に検索ができます。' , [], 'Tests_Browser_TestCase_Admin_Member_SearchTest_testSearchHogeHoge_000.png' ) prs.save( '管理者画面操作マニュアル.pptx' ) # スライドにタイトル、サブタイトル、本文、画像ファイルを追加 def addContentPage(prs, title, subtitle, texts, fn): fnms = glob( '%s/%s' % (__screenshots_dir, fn)) # 画像ファイル読み込み slide = prs.slides.add_slide(prs.slide_layouts[ 1 ]) # pptxファイルにスライド追加 # slide = addTextToSlide(slide, title, subtitle, texts) # スライドにタイトル、サブタイトル、本文を追加 addPictureToSlide(prs, slide, fnms[ 0 ]) # スライドに画像追加 return prs # スライドに画像を追加 def addPictureToSlide(prs, slide, fnm): pic = slide.shapes.add_picture(fnm, 0 , 0 ) # 縦0.8倍。画像の比率変えず base = pic.height pic.height = int (prs.slide_height * 0.7 ) pic.width = int (pic.width * (pic.height / base)) # 左右中央揃え pic.left = int ((prs.slide_width - pic.width) / 2 ) # 下揃え pic.top = int ((prs.slide_height - pic.height)) return slide |
上記のコードはtemplate.pptxというテンプレートに従ってpptxファイルオブジェクトを生成。それに画像を追加して保存する、というコードになります。これだけでも画像を更新する度にpythonを走らせるだけでpptxを更新できます。特定の形式のpptxを高頻度で変更する場合、多少わかりにくくともpptx生成をプログラミング化すると作業が大きくはかどります。