0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

python-pptxでマスタースライドのプレイスホルダーを探す

Last updated at Posted at 2022-08-17

ちょっと一定の様式のスライドを何枚も連続させる必要がありまして。
スクリーンショット 2022-08-17 14.56.30.png
まずスライドマスターとしてレイアウトを作成し、そのレイアウトのスライドに手入力…はめんどくさいので、CSVファイルとかにデータを入れておいて、それを流し込むことにします。VBAは分からないので、PythonでPowerPointのスライドを作れるライブラリpython-pptxを使います。

↓スライドマスターでレイアウトを作った図。今回はこれをhinagataVisitorWP.pptxとして保存。
スクリーンショット 2022-08-17 14.06.24.png
スライドマスターができたので、データを流し込んでみましょう。

test.py
from pptx import Presentation

prs = Presentation("hinagataVisitorWP")
layout = prs.slide_layouts[0] #お目当てのレイアウトを取得

sld = prs.slides.add_slide(layout) #上記レイアウトでスライドを1枚生成
sld.placeholders[0].text = "山古 太郎" #最初のプレイスホルダーに「山古 太郎」を設定...するはずが
# => KeyError: 'no placeholder on this slide with idx == 0'

なにやらエラーになってしまいました。どうやらこのスライドには、placeholders[0]で特定できるプレイスホルダーは無いらしいです。
プレイスホルダーのナンバリング規則について詳しいことはよく分からないのですが、デザインをいろいろ試行錯誤して最後に残ったプレイスホルダーのインデックスが0〜じゃなかったっぽい。
ということで、これらのプレイスホルダーのインデックス(idx)を取得してみましょう。idxは各placeholderオブジェクトのplaceholder_formatに入っているらしいので、こんな感じにやってみます。

さっきの続き
for ph in sld.placeholders:
    ph.text = str(ph.placeholder_format.idx)

prs.save("test.pptx")

↓出力結果(test.pptx)
スクリーンショット 2022-08-17 14.41.18.png
4つのプレイスホルダーのidxはどうやらそれぞれ、カテゴリー名欄が10、氏名欄が11、次の人の氏名欄が12、よみがな欄が13だったようです。
ということで、こうして判明したプレイスホルダーに値を設定すればOK。

sld.placeholders[11].text = "山古 太郎"
sld.placeholders[13].text = "さんぷる たろう"

↓出力結果
スクリーンショット 2022-08-17 14.33.19.png
プレイスホルダーへの値の設定方法がわかったので、あとは、スライドを量産したいリストをforで回してどんどんprs.slides.add_slide(layout)していけばOK。
Enjoy!!

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?