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をご覧くださいませ。