PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。
前々回の記事では「Python-pptx」の基礎的な使い方、。前回の記事では、「テキストの装飾」について説明しました。
今回は、画像の貼り付け方を説明したいと思います。
PowerPoint資料に画像を張り付けることは結構~多いと思います。そして、沢山の画像を張り付けなければいけない場合は・・・とても面倒です。
画像貼り付けのような超単調な作業は、Pythonで自動化すべきです!
Python-pptxでの画像貼り付けは、とても簡単ですのでバシバシ自動化してください!
PythonでPowerpointを自動化:画像の貼り付け【1】
Python-pptxで画像を貼り付ける方法を見ていきましょう。ここでは、Python-pptxの基礎的な使い方は知っているという前提で説明します。Python-pptxの基本的な使い方は、前々回の記事を参考にしてください。
スライドレイアウトから、「タイトル付きの図(Picture with Caption)」スライドを選択します。
「タイトル付き図(Picture with Caption」は、slide_layout[8]とすると選択できます。

タイトル付き図(Picture with Caption)スライドには、3個のプレースホルダーがあります。図用のplaceholderは、placeholders[1]とすれば取得できます。
placeholders[1]を選択すると、PicturePlaceholderオブジェクトが得られます。後は、PicturePlaceholderオブジェクトのinsert_pictureメソッドを使えば、画像の挿入が出来ます。
では、ソースコードを見ていきましょう。
下のソースコードでは、以下の事をおこなっています。
- タイトルスライドを作成
- 次のスライドは「タイトル付きの図(Picture with Caption)」スライドを選択
- スライド内の画像用プレースホルダーに画像を貼り付け
#モジュールのインポート
from pptx import Presentation
from pptx.util import Cm
#プレゼンテーションオブジェクトの作成
ppt = Presentation()
#タイトルスライドを追加
slide_layout_0 = ppt.slide_layouts[0]
slide_0 = ppt.slides.add_slide(slide_layout_0)
#プレースホルダーを取得
slide_0_title = slide_0.placeholders[0]
#テキストフレームを取得
text_frame = slide_0_title.text_frame
#パラグラフの取得
pg = text_frame.paragraphs[0]
#テキスト挿入
pg.text = "Python-pptxで画像を貼り付け"
#タイトル付きの図(Picture with Caption)を選択
slide_layout_8 = ppt.slide_layouts[8]
slide_8 = ppt.slides.add_slide(slide_layout_8)
#picture placeholder
placeholder_1 = slide_8.placeholders[1]
placeholder_1.insert_picture("./picture_test.JPG")
#title placeholder
placeholder_0 = slide_8.placeholders[0]
placeholder_0.text = "title placeholder"
#text placeholder
placeholder_1 = slide_8.placeholders[2]
placeholder_1.text = "text placeholder"
ppt.save("./test3.pptx")
このコードを実行すると、以下のようなスライドが作成されます。

PythonでPowerpointを自動化:画像の貼り付け【2】
先ほどの例では、タイトル付きの図(Picture with Caption)スライドを使用して、1スライドに1枚の画像を貼り付けました。
今回は、1スライドに複数の画像を貼り付ける方法について説明します。
「白紙」スライドを使用し、貼り付け位置と画像サイズを指定して画像を貼り付けます。白紙スライドの追加方法は、前々回の記事や前回の記事で説明しました。
画像のサイズを指定し、自分の好きな位置に貼り付けるためには、Shapesオブジェクトのadd_pictureメソッドを使用します。書式は以下の通りです。
leftは横位置、topは縦位置です。widthは幅、heightは高さです。widthとheightはは省略可能ですが、所望のサイズにしたいときに指定します。widthだけ、或は、heightのみを指定した場合は、元の画像の縦横比(アスペクト比)を保つように、もう片方の値が自動で計算されます。
ppt.save()の前に、以下のコードを入れて実行してください。
(省略)
#白紙のスライドを追加
slide_layout_6 = ppt.slide_layouts[6]
slide_6 = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes
#add_picture(image_file, left, top, width=None, height=None)
shapes.add_picture("./picture_test.JPG", 0, 0, width=None, height=Cm(7.88))
left、topの値は0にし、heightだけ指定しました。以下のように、左上隅を起点として画像が貼り付けられました。
複数枚の写真を貼り付けたい場合は、add_picture()を何回も行えば良いことになります。
