大量PowerPointの指定個所に画像をPythonで自動挿入

Pythondで自動処理 大量PowerPointに画像挿入

Microsoft提供のPowerPointはプレゼンテーションソフトですので、自動化のイメージがつかない人がほとんどだと思いますし、ニーズもほとんどありません。

セキュリティの観点で、作成してきたPowerPointにロゴや注意事項を必ず入れなければならなくなった。そのため、全てのPowerPointをチェックし、ないものには追加で入れる必要がある。となればどうでしょうか?大量のPowerPointから手動で開いて確認するのは生産性が低いです。

本記事では上記ケースを想定して、Pythonからパワーポイントに特定画像を指定箇所に追加する方法をご紹介致します。

目次

PowerPointの全スライドに自動で画像挿入する考え方

スライドマスタの機能説明

PowerPointの全てのスライドに特定画像を同じ個所に入れる方法として、スライドマスタ機能を使います。スライドマスタに登録すると全てのパワーポイントのスライドページに同一内容が反映されるからです。

PythonからPowerPointにアクセス

Pythonからパワーポイントを開き、挿入画像を読み込み後、座標指定で貼り付ける方法です。この実装を完了後に全てのパワーポイントファイルをループ処理で読み込んで処理する流れをご紹介します。

PowerPointの全スライドに自動で画像挿入するPytyonコード

必要ライブラリのインストール

今回利用するライブラリがインストールされていない方向けのコマンドです。

pip install pywin32
pip install glob

パワーポイントのスライドマスタに画像挿入コード

パワーポイントのスライドマスタに画像を挿入する関数の紹介です。

import win32com.client as win32

def PowerPoint_add(input_path,image_path,output_path):


    #パワーポイントアプリのオブジェクト作成
    app = win32.gencache.EnsureDispatch("PowerPoint.Application")

    #指定ファイルを非表示でオープン
    presentation = app.Presentations.Open(FileName=input_path,WithWindow=0)

    #スライドマスタの幅と高さを取得
    master_w = presentation.SlideMaster.Width
    master_h = presentation.SlideMaster.Height

    #貼り付けたい画像を読み込む
    shape = presentation.SlideMaster.Shapes.AddPicture(FileName=image_path,LinkToFile=False,SaveWithDocument=True,Left=0,Top=0)
    
    #画像の貼り付け位置を調整する ここでは指定を右端と下として算出
    #パワーポイントの真ん中あたりに貼り付け
    right_ = 230
    bottom_ = 230
    
    shape.Left = master_w - shape.Width - right_
    shape.Top = master_h - shape.Height - bottom_

    #貼り付けは最背面とする
    shape.ZOrder(1)
    presentation.SaveAs(output_path)
    app.Quit()
    return

実行する時は下記。

#変数
input_path="ファイルパスを指定"
image_path="ファイルパスを指定"
output_path="ファイルパスを指定"

#関数実行
PowerPoint_add(input_path,gazou_path,output_path)

実行完了すると指定したパワーポイントの全てのスライドに画像が挿入されています。

ディレクトリ内の全てのパワーポイントに画像を反映させる

前章作成のPython関数を利用し、ループ処理を繰り返すことで大量のパワーポイントに画像を自動的に差し込むコードです。

対象ディレクトリに画像を差し込みたい全てのパワーポイントを配置、拡張子の「pptx」を対象にファイル名をリスト化します。for文でループ処理を行いPython関数PowerPoint_addを利用することでパワーポイントに画像を埋め込む方法をとりました。

import glob
target_files=glob.glob("ディレクトリpath" + "/**/*pptx",recursive = True)
for i in target_files:
PowerPoint_add(i[0],"画像ファイルpath",i[0])

ご質問やご依頼について

記事やDX化のご質問や依頼はServiceをご覧くださいませ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次