ユーザ用ツール

サイト用ツール


powerpoint-merge-tool

文書の過去の版を表示しています。


PowerPoint マージツール

複数人が個別に更新したPowerPointファイルを1つのPowerPointファイルにまとめるという作業があります。少なくともスライドレベルの結合を人力で行なうことは不毛なので、自動化したいと思います。

利用ツール

Pythonのライブラリを使えばサクッとできるだろう、と考えていましたが、意外と制約があります。 結論として、今回の用途に最適と判断したのは win32com です。

  • Python-pptx
    • 細かなPowerPoint操作ができて、ライセンス面でも使いやすいが、 スライド単位でマージする機能がありません。スライド配下にあるオブジェクトを全て参照して、それらを使って再構築する方法を取ることになります
  • 他のマージできるライブラリ
    • インターネットを検索すると、
  • win32com
    • Windows環境に限定されますが、直接PowerPointを用いて操作します。Windows環境で動かす前提で良いなら、これが一番無難な選択肢かと思います。

環境準備

必要なライブラリをインストールします。

pip install pywin32
python.exe -m pip install --upgrade pip
import win32com.client
 
ppt = win32com.client.Dispatch("PowerPoint.Application")
ppt.Visible = True
presentation = ppt.Presentations.Open(r"C:\Work\PPTCombined\first.pptx")
 
for f in [r"C:\Work\PPTCombined\second.pptx", r"C:\Work\PPTCombined\third.pptx"]:
    presentation.Slides.InsertFromFile(f, presentation.Slides.Count)
 
presentation.SaveAs(r"C:\Work\PPTCombined\merged.pptx")
ppt.Quit()

実行ファイル化

Windows環境ということもあり、Python環境をインストールしていない人でも使えるようにしたいです。

トラブルシューティング

自分は下記のエラーで悩まされました。

pywintypes.com_error: (-2147352567, '例外が発生しました。', (0, None, None, None, 0, -2147024773), None)

下記の対策で改善しました。

  • ファイルパスを絶対パスにする
  • raw文字列指定をする(“C:\Work\PPTCombined\first.pptx” を r“C:\Work\PPTCombined\first.pptx”とする)
    • raw文字列にしないと、バックスラッシュがエスケープ文字として解釈され、ファイルパスが正しくなくなります。
powerpoint-merge-tool.1768521134.txt.gz · 最終更新: by bokupi

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki