ちょっと一定の様式のスライドを何枚も連続させる必要がありまして。
まずスライドマスターとしてレイアウトを作成し、そのレイアウトのスライドに手入力…はめんどくさいので、CSVファイルとかにデータを入れておいて、それを流し込むことにします。VBAは分からないので、PythonでPowerPointのスライドを作れるライブラリpython-pptx
を使います。
↓スライドマスターでレイアウトを作った図。今回はこれをhinagataVisitorWP.pptx
として保存。
スライドマスターができたので、データを流し込んでみましょう。
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
)
4つのプレイスホルダーのidx
はどうやらそれぞれ、カテゴリー名欄が10、氏名欄が11、次の人の氏名欄が12、よみがな欄が13だったようです。
ということで、こうして判明したプレイスホルダーに値を設定すればOK。
sld.placeholders[11].text = "山古 太郎"
sld.placeholders[13].text = "さんぷる たろう"
↓出力結果
プレイスホルダーへの値の設定方法がわかったので、あとは、スライドを量産したいリストをforで回してどんどんprs.slides.add_slide(layout)
していけばOK。
Enjoy!!
参考文献