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
- pptmerger.py
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環境をインストールしていない人でも使えるようにしたいです。
まず必要なライブラリをインストールします。
pip install pyinstaller
下記のコマンドを実行して、実行ファイルを作成します。distフォルダ以下にexeファイルが出力されます。
pyinstaller --onefile pptmerger.py
トラブルシューティング
自分は下記のエラーで悩まされました。
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.1768521607.txt.gz · 最終更新: by bokupi
