【Python】PowerPointのファイルをpythonで作るpython-pptxの紹介

著者:杉浦

【Python】PowerPointのファイルをpythonで作るpython-pptxの紹介

 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は例えば、次の様に記述できます。

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生成をプログラミング化すると作業が大きくはかどります。

  • この記事いいね! (1)

著者について

杉浦 administrator