Hermes Agent Wiki 非公式・日本語wiki
この skill をそのまま使う: GitHub で原文を見る

英語原文・frontmatter 込みで、Hermes が読み込む実体そのままです(このページの本文は日本語版)。

Powerpoint

目次

python-pptx で .pptx のスライドを作り、読み、直します。

skill の情報

提供元 最初から入っています
パス skills/productivity/powerpoint
バージョン 1.0.0
作者 Nous Research
ライセンス MIT
対応プラットフォーム linux, macos, windows
タグ pptx, powerpoint, presentations, slides, office, python-pptx
関連 skill docx, xlsx, pdf

参考: SKILL.md 全文

Powerpoint Skill

python-pptx ライブラリーを使って、PowerPoint(.pptx)の資料を作り、 中身を調べ、直します。補助スクリプトは 4 本あり、JSON の指定からの 資料作成、構造を保った読み出し、その場での修正、ひな形をもとにした 社内書式の資料づくりをまかなえます。すべてオフラインで動き、 PowerPoint を入れておく必要はありません。

こんなときに使います

  • スライド資料・報告用の資料・提案資料を作ってほしいと頼まれたとき。
  • 誰かから共有された .pptx から、本文・ノート・表・グラフのデータ・

画像を取り出したいとき。

  • 既存の資料を更新したいとき: 文字の差し替え、グラフのデータ更新、

ロゴの入れ替え、スライドの削除や並べ替え。

  • 会社のひな形 .pptx から、書式に沿った資料を作りたいとき。
  • .ppt(古いバイナリー形式)には使いません。LibreOffice があるなら

soffice --convert-to pptx old.ppt で先に変換してください。

事前に必要なもの

  • Python 3.10 以上と python-pptx

pip install python-pptx)。Pillow は任意です(自分で画像の大きさを 調べたいときだけ必要になります)。

  • 任意: スライドを画像にして見た目を確かめるための LibreOffice

soffice)。なくても支障ないようにしてあります。作成・読み出し・ 修正はどれも、これなしで動きます。

  • 使えるかどうかは terminal で確かめます:

python3 -c "import pptx; print(pptx.__version__)"which soffice

実行のしかた

スクリプトはすべて scripts/ にあり、--help に対応し、JSON を標準出力に 表示し、失敗すると 0 以外の終了コードを返します。terminal から実行します:

python3 scripts/pptx_create.py deck.json out.pptx
python3 scripts/pptx_read.py deck.pptx --outline      # full JSON outline
python3 scripts/pptx_read.py deck.pptx --notes        # speaker notes
python3 scripts/pptx_read.py deck.pptx --images ./img # export pictures
python3 scripts/pptx_edit.py deck.pptx --replace-text "Old Corp" "New Corp"
python3 scripts/pptx_edit.py deck.pptx --chart-data update.json
python3 scripts/pptx_edit.py deck.pptx --remove-slide 3 --move-slide 2 0
python3 scripts/pptx_from_template.py brand.pptx out.pptx --values vals.json

JSON の指定は write_file で書き、スクリプトの出力や作られた JSON は read_file で確かめてください。

早見表

やりたいこと コマンド
指定から新しい資料を作る pptx_create.py spec.json out.pptx
16:9 か 4:3 か 指定の中で "slide_size": "16:9" または "4:3"
構成を JSON で見る pptx_read.py deck.pptx --outline
画像を書き出す pptx_read.py deck.pptx --images DIR
文字を置き換える pptx_edit.py deck.pptx --replace-text OLD NEW
グラフを更新する pptx_edit.py deck.pptx --chart-data spec.json
画像を入れ替える pptx_edit.py deck.pptx --swap-image N NAME new.png
スライドを削除する pptx_edit.py deck.pptx --remove-slide N
スライドを並べ替える pptx_edit.py deck.pptx --move-slide FROM TO
ひな形を埋める pptx_from_template.py tpl.pptx out.pptx --values v.json

手順

1. 資料を作る

JSON の指定を書いてから(形式の全体は pptx_create.py --help を見てください)、 pptx_create.py を実行します。スライドごとに指定できるのは、layout(title、 title_content、section、two_content、title_only、blank)、titlesubtitlebullets(文字列、または level 0〜4・size をポイントで・ bolditalicfontcolor を 16 進数で指定した辞書)、images(パスと 左・上・幅・高さをインチで)、tablesrows は入れ子の一覧)、shapes (rectangle、rounded_rectangle、oval、diamond、right_arrow、chevron。 fill を 16 進数で、text は任意)、charts(bar、bar_h、line、pie に categoriesseries)、notes(発表者用のノート)です。

2. 資料を読む

pptx_read.py deck.pptx --outline は、スライドの大きさ、使われている レイアウトの一覧、そしてスライドごとにレイアウト名・すべての図形の文字・ 表のセル・画像の一覧(ファイル名・拡張子・バイト数)・グラフの項目と系列と 値・発表者用のノートを返します。--images DIR で埋め込まれた画像を ファイルに書き出し、中身を見たいときは書き出した画像を vision_analyze に かけてください。

3. 資料を直す

pptx_edit.py は複数の操作を一度にまとめて行います。元のファイルを 残したいときは --output を使ってください。文字の置き換えは、スライドの 図形・表のセル・ノートを調べます。グラフの更新は chart.replace_data() を 使い、スライドとグラフの番号、新しい項目と系列を JSON で指定します。画像の 入れ替えは画像の関連付け ID を差し替えるので、位置と大きさはそのまま 保たれます。スライドの削除は関連付けと <p:sldId> の項目を取り除き、 並べ替えは <p:sldIdLst> の中で <p:sldId> の要素を動かします(どちらも python-pptx には公開された API がないため、スクリプトが XML の 段階で処理します)。

4. ひな形から作る

pptx_from_template.py は書式付きの .pptx を開き、値の JSON にある {{token}} をスライド・表・ノートのすべてで置き換えます。さらに、ひな形が 持つレイアウト(名前か番号で指定)を使って新しいスライドを足せるので、 マスターのフォントと配色をそのまま受け継げます。ヒント: スライドが 1 枚も ない状態からひな形を使いたいときは、あとから pptx_edit.py --remove-slide で 元のスライドを消してください。

5. 見た目の確認(任意)

soffice があれば、スライドを PNG にして vision_analyze で 見てください:

soffice --headless --convert-to png --outdir ./render deck.pptx  # slide 1
soffice --headless --convert-to pdf --outdir ./render deck.pptx  # all slides

PNG への書き出しは 1 枚目のスライドだけです。全部のスライドを見たいときは PDF に変換してください(poppler があれば、そのあと pdftoppm -png render/deck.pdf render/slide)。soffice がないときは pptx_read.py の JSON の構成に頼ります。中身と構造は確かめられますが、 見た目までは分かりません。

つまずきやすいところ

  • 文字が分かれること: PowerPoint は、スペルチェックや書式の切れ目で

段落の文字を複数の断片に分けます。--replace-text は、探している文字が 1 つの断片に収まっているときは書式をそのまま保ちます。断片をまたぐ場合は、 段落が最初の断片の書式だけで書き直されます。大事なスライドは置き換えの あとに確かめてください。

  • 並べ替えは XML の段階の操作です: python-pptx には対応した

並べ替えの API がありません。--move-slide<p:sldIdLst> を直接 操作します。ふつうの資料なら安全ですが、あとで資料を読み直して確かめて ください。

  • 資料のあいだでスライドをコピーすることはできません。レイアウト・

画像・関連付けを深くたどって複製する必要があるためです。移す先の資料で スライドを作り直してください。

  • グラフの修正はデータの全体を入れ替えます。1 つのセルだけを直すことは

できません。系列の追加と削除はできますが、グラフの*種類*を変えることは できません。

  • python-pptx の既定のひな形は 4:3 です。作成用のスクリプトは、指定が

なければ 16:9 にします。独自のひな形はそれぞれの大きさを保ちます。

  • レイアウトの番号はひな形によって変わります。書式付きのひな形では、まず

レイアウト名を調べてください: pptx_read.py template.pptx --outlinelayouts_available)。

  • 白紙のレイアウトでは slide.shapes.title が None になります。作成用の

スクリプトはこれに対応していますが、その場で python-pptx のコードを 書くときは覚えておいてください。

  • 指定ファイルを書くときは必ず encoding="utf-8" を渡してください。

{{city}} のような差し込みには ASCII 以外の値が入ることがあります。

確認

  1. 作成や修正のあとは pptx_read.py OUT.pptx --outline を実行し、

スライド数・文字・表・ノート・グラフの値が意図どおりか確かめます。

  1. --images DIR を実行してファイルの大きさを見れば、画像が埋め込まれて

いることを確かめられます。

  1. 大事な資料では soffice で書き出し(手順の 5 を参照)、スライドごとの

画像を vision_analyze で見てください。

  1. 同梱のテスト一式が仕様そのものです:

python3 -m pytest tests/ -q(python-pptx と pytest が必要です)。