はじめに
パワポのスライド1枚に1枚ずつ画像を貼り付けていって作業手順書にする、みたいなのありますよね。超絶単純作業なのになかなか時間かかるやつ。
単純な繰り返し作業なので、ネット上に転がっていたコードを用いて自動化したいと思います。
目標実装機能
少なくとも必ず実装したい機能
スライド1枚につき1枚の画像が貼り付けられたパワポの資料を自動で作成すること。
願わくば
- 表紙の追加
- テキストボックスの追加
- 画像を貼り付けないスライドの挿入
自動作成したいスライド
私の好きな某アニメの登場人物紹介スライドを作成したいと思っています。
構成は、
表紙→画像→キャラ説明→画像→キャラ説明→…(以下、画像とキャラ説明を交互に)
としています。
今回作成したコードを用いて自動作成したスライドは、最後にご紹介します。
環境
python3.7.2
Windows10
コード
import pptx
from pptx.util import Inches
from pptx import Presentation
from glob import glob
ppt = Presentation()
width = ppt.slide_width
height = ppt.slide_height
# 使用するスライドの種類
title_slide_layout = ppt.slide_layouts[0] #Title Slideの作成
bullet_slide_layout = ppt.slide_layouts[1] #Title and Contentの作成
blank_slide_layout = ppt.slide_layouts[6] #Blankの作成
# Title Slide
slide = ppt.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "○○ Description"
subtitle.text = "kokoro pyonpyon"
# 画像をBlankに張り付ける準備
fnms = glob('figures/*.JPG')
tx_left = tx_top = tx_width = tx_height = Inches(1)
i = 1
for fnm in fnms:
#画像をBlankに張る
slide_picture = ppt.slides.add_slide(blank_slide_layout)
pic = slide_picture.shapes.add_picture(fnm, width/4,height/2, width/2, height/2)
#ついでに空きスペースにテキストボックスを挿入する
txBox = slide_picture.shapes.add_textbox(tx_left, tx_top, tx_width*15, tx_height)
tB = txBox.text_frame
tB.text = "Name: "
#Title and Contentの作成
slide_description = ppt.slides.add_slide(bullet_slide_layout)
shapes = slide_description.shapes
title_shape = shapes.title
body_shape = shapes.placeholders[1]
#Title and Contentにタイトルとテキストを書き込む
title_shape.text = 'Character description ' + str(i)
tf = body_shape.text_frame
tf.text = 'She works at '
i += 1
ppt.save('figure.pptx')
解説
importするライブラリ
pptx
パワーポイントのファイル(.pptx)を作成、アップデートするPythonライブラリ。
典型的な用途として、データベースからパワーポイント資料をカスタマイズした状態で作成したり、webアプリ上のリンクをクリックすることでダウンロードできるようにしたりすることが挙げられる。業務管理システム上の情報をまとめた、エンジニアリングステータスレポートを報告可能な形式で自動作成させることもできる。プレゼンテーションのライブラリーを一括でアップデートしたり、いちいち取り組むのは飽き飽きするような、一枚か二枚のスライドの作成を自動で行ったりすることもある。
(この資料の一部を直訳。)
まあこれを簡単にわかっていれば事足ります。多分。
各コマンドの簡単な意味は、コードの中でコメントしています。
このコードを用いてできたスライド
細かい部分はスライドごとに手動で入力しましょう。
大半の部分は自動で作成されているので、かなり省力化されているはずです。
おまけ
ライブラリのインストールの仕方。
$ pip install numpy
みたいな。なんとなくnumpyにしました。