📘

Python で .pptx を生成するということ

に公開

LLM の登場で .pptx の自動生成ニーズが高まっています。
Python で .pptx を生成する主な方法 3 点について改めて知識の整理を行いました。

  • 方法①:Office Open XML(Open XML)を操作するライブラリを利用する
  • 方法②:COM オブジェクトを利用する
  • 方法③:Open XML を直接記述する

はじめに:そもそも .pptx ってどんな形式?

.pptx ファイルの実態はざっくり言うと「Zip 化された XML 群」です。
末尾に「x」の付く他の Office ファイル(.xlsx / .docx)と同様に Open XML 形式で保存されています。

内部が気になる方は .pptx を .zip にリネームして解凍すると中身の XML が見れます。

https://www.cresco.co.jp/blog/entry/740.html

方法①:Open XML を操作するライブラリを利用する

最もポピュラーな方法で、Open XML を操作するライブラリとしては python-pptx が有名です。

https://github.com/scanny/python-pptx

python-pptxの内部実装ですが、lxmlを用いて XML を取り扱いつつ Open XML に対応するロジックは独自で実装しています。
Open XML を操作するライブラリは Python 以外の言語でも多数存在します(ex. Open XML SDK)。

方法②:COM オブジェクトを利用する

COM(Component Object Model)オブジェクトを利用すれば PowerPoint アプリを直接操作して .pptx を生成できます。

COM オブジェクトとは Windows の技術のひとつで、Wikipedia を見てもいまいちよく分かりませんが、ざっくり理解だと Windows のアプリを外部から操作する仕組み(インタフェース) です。
この仕組みを利用すれば Python(外部)から PowerPoint アプリをリモート操作できるわけです。
操作対象の PowerPoint アプリがインストールされている必要があるため、サーバサイドでの利用は基本的にできません。

この方法では(使ったことはないですが)pywin32ライブラリ等が用いられているようです。

https://github.com/mhammond/pywin32

方法③:Office Open XML を直接記述する

ほぼチャレンジする方はいないかと思いますが、Open XML を直接記述して .pptx を生成する方法もあります。
LLM を使った Open XML の生成を実際に試した記事を見つけたのでご興味があれば参考になるかもしれません。

https://listenlabs.ai/blog/ppt-generator

ただしあまりうまくはいかなかったもよう。

PowerPointを生成する最も簡単な方法は、LLMにXMLを書き出させることです。しかし、この「解決策」は、非常に非効率であるだけでなく、現在のLLMの能力を見落としています。LLMは、このPowerPointを一貫して書き出すには不十分です

とある通信会社の有志

Discussion