PythonでPowerPointを操作する

ゆうき( @BASEBALLY15 )です^^

Pythonを使って,PowerPointを操作したいのですが・・・

分かりました^^
それでは,今回は,Pythonを使って,PowerPointを操作する方法についてご紹介します.

前回に投稿した『 新型コロナウイルスの未来予測 』のデータを使っていきたいと思います.

PythonでPowerPointを操作すると,どんなスライドが完成するの?

実際に,自分がPythonでPowerPointを操作して,作ったスライドがこれです⤵

1枚目:コロナウイルスの推移と未来予測

PythonでPowerPointを操作その1

2枚目:コロナウイルスとは?

PythonでPowerPointを操作その2

3枚目:実際の推移と予測の比較

PythonでPowerPointを操作その3

(※上のスライドのグラフは,画像を張り付けています.)

それでは,コードを見ていきましょう⤵

PythonでPowerPointを操作してみた!

まずは,PowerPointを作るためのライブラリを用意します.

ライブラリ

#PowerPointを編集するためのライブラリ
from pptx import Presentation

#サイズやテキストを扱うためのライブラリ
from pptx.util import Inches, Pt

#テキストの背景の色を決めるためのライブラリ
from pptx.dml.color import RGBColor

次に,コードをご紹介します.

1枚目のスライドのコード

PowerPointのファイル名を決めよう!

まずは,PowerPointのファイル(.pptx)名を決めます.

#セーブファイル名
save_path = "./Coronavirus.pptx"

1枚目のスライドを用意しよう!

###1枚目のスライドを作成###
prs = Presentation()

#スライドのレイアウトを指定する
title_slide_layout = prs.slide_layouts[0]
    
slide = prs.slides.add_slide(title_slide_layout)

title = slide.shapes.title

#サブタイトル
subtitle = slide.placeholders[1]

次に,1枚目のスライドに『タイトル』と『サブタイトル』を追加します.

タイトルとサブタイトルを追加しよう!

title.text』でタイトルを追加し,『subtitle.text』でサブタイトルを追加します.

title.text = "コロナウイルスの推移 \n と \n 未来予測"

subtitle.text = "~未来予測は信用できるのか?~"

これで,1枚目のスライドが完成です.

次に,2枚目のスライドを作ります.

2枚目のスライドのコード

まずは,画像やテキストの配置を決めるために,長さの単位を変換しておきます.

#インチをセンチメートルに変換する
def Centis(length):
    
    centi = Inches(length/2.54)
    
    return centi

次に,1枚目と同様に,スライドを作ります.

###2枚目のスライドを追加###
#スライドのレイアウトを指定する
title_slide_layout = prs.slide_layouts[1]
    
slide = prs.slides.add_slide(title_slide_layout)

title = slide.shapes.title

#タイトル
title.text = "コロナウイルスとは?"

それでは,画像とテキストを追加していきましょう⤵

テキストボックスを作ろう!

まずは,テキストボックスを作り,その中に文字を書いていきます.

#テキストボックスを張り付ける
#文字列
textbox_title1 = "哺乳類や鳥類に様々な疾患を引き起こし,\n人の場合,風邪などの呼吸器感染症を引き起こします.\n\n最近話題になっている『新型コロナウイルス』は,\n過去に人に感染しなかった新種のウイルスが原因となっています."

#テキストボックスの位置を決める
textbox_left = Centis(3)

textbox_top = Centis(4)

#テキストボックスの幅と高さを決める
textbox_width = Centis(20)

textbox_height = Centis(5)

#テキストのフォントサイズを決める
textbox_fontsize = 15

#テキストボックスの背景の色を決める(灰色)
textbox_color = RGBColor(192, 192, 192)

#テキストボックスを配置する
textbox = slide.shapes.add_textbox(textbox_left, 
                                   textbox_top, 
                                   textbox_width,
                                   textbox_height)

#テキストボックスに書き込む
textbox.text = textbox_title1

#フォントサイズを適用
textbox.text_frame.add_paragraph().font.size = Pt(textbox_fontsize)

#テキストボックスの背景に色を塗る
textbox.fill.solid()

textbox.fill.fore_color.rgb = textbox_color

画像を張り付けよう!

次に,画像を張り付けます.合計で2枚貼り付けます.

1枚目は,

2枚目は,

の画像を使います.

1枚目の画像を追加⤵

#1枚目の画像を張り付ける
#張り付ける位置
img_left = Centis(3)

img_top = Centis(10)

#画像の高さを指定する
img_height = Centis(8)

#画像のパスを指定
img_path = "./cdc-UDKjDYppSfw-unsplash-2048x1765.jpg"

#画像を張り付ける
slide.shapes.add_picture(img_path, 
                        img_left, 
                        img_top, 
                        height=img_height)

2枚目の画像を追加⤵

#2枚目の画像を張り付ける
#挿入する位置
img2_left = Centis(22-6)

img2_top = Centis(10)

#画像の高さを指定する
img2_height = Centis(8)

#画像のパスを指定
img2_path = "./BB10e8S8.jpg"

#画像を張り付ける
slide.shapes.add_picture(img2_path, 
                        img2_left, 
                        img2_top, 
                        height=img2_height)

すると,このように2枚目のスライドが完成します.

3枚目のスライドのコード

3枚目のスライドは,基本的に2枚目のコードと同じものを使って配置を変えているだけなので,

コードのみを載せておきます.

(※2枚目のコードを使うと,3枚目のスライドを作ることができます.)

###3枚目のスライドを追加###
title_slide_layout = prs.slide_layouts[1]

slide = prs.slides.add_slide(title_slide_layout)

title = slide.shapes.title

title.text = "実際の推移と予測の比較"
#---------------------------------------------------------------------
#1枚目の画像の説明文を用意

#テキストボックスを用意
img_text = "実際の推移(2/21現在)"

#テキストボックスの位置
text_left = Centis(1)

text_top = Centis(4)

#テキストボックスの幅と高さを決める
text_width = Centis(8)

text_height = Centis(1)

#文字のフォントサイズを決める
textbox_fontsize = 11

textbox = slide.shapes.add_textbox(text_left,
                                  text_top,
                                  text_width,
                                  text_height)

#テキストを書きこむ
textbox.text = img_text

#フォントサイズを適用
textbox.text_frame.add_paragraph().font.size = Pt(textbox_fontsize)

#---------------------------------------------------------------------

#1枚目の画像を張り付ける
#張り付ける位置
img_left = Centis(1)

img_top = Centis(5)

#画像の高さを指定する
img_height = Centis(8)

#画像のパスを指定
img_path = "./BB10e8S8.jpg"

#画像を張り付ける
slide.shapes.add_picture(img_path, 
                        img_left, 
                        img_top, 
                        height=img_height)

#---------------------------------------------------------------------
#---------------------------------------------------------------------
#2枚目の画像の説明文を用意

#テキストボックスを用意
img_text2 = "未来予測(2/21現在)"

#テキストボックスの位置
text2_left = Centis(10)

text2_top = Centis(4)

#テキストボックスの幅と高さを決める
text2_width = Centis(8)

text2_height = Centis(1)

#文字のフォントサイズを決める
textbox2_fontsize = 11

textbox2 = slide.shapes.add_textbox(text2_left,
                                  text2_top,
                                  text2_width,
                                  text2_height)

#テキストを書きこむ
textbox2.text = img_text2

#フォントサイズを適用
textbox2.text_frame.add_paragraph().font.size = Pt(textbox2_fontsize)

#---------------------------------------------------------------------

#2枚目の画像を張り付ける
#張り付ける位置
img2_left = Centis(9)

img2_top = Centis(5)

#画像の高さを指定する
img2_height = Centis(8)

#画像のパスを指定
img2_path = "corona_now.png"

#画像を張り付ける
slide.shapes.add_picture(img2_path, 
                        img2_left, 
                        img2_top, 
                        height=img2_height)

#---------------------------------------------------------------------
#『結果』を書くためのテキストボックスを作る

#テキストボックスを用意
img_text3 = "結果\n上の結果を見ると, 21日時点で,未来予測の場合は約7万7千人という結果になり,\n実際の推移を見ると,7万5千人以上という結果なので,\n近い値になっているのではないでしょうか!?\nグラフの形に違いはあるものの,\n未来予測と実際の感染者数は同じような結果になっていることが分かりました."


#テキストボックスの位置
text3_left = Centis(1)

text3_top = Centis(13.4)

#テキストボックスの幅と高さを決める
text3_width = Centis(24)

text3_height = Centis(5)

#文字のフォントサイズを決める
textbox3_fontsize = 11

textbox3 = slide.shapes.add_textbox(text3_left,
                                  text3_top,
                                  text3_width,
                                  text3_height)

#テキストを書きこむ
textbox3.text = img_text3

#フォントサイズを適用
textbox3.text_frame.add_paragraph().font.size = Pt(textbox3_fontsize)

#テキストボックスの背景を決める
textbox3_color = RGBColor(192, 192, 192)

#テキストボックスの背景に色を塗る
textbox3.fill.solid()

textbox3.fill.fore_color.rgb = textbox3_color

.pptx形式で保存しよう!

最後に,作ったPowerPointのファイルを保存します.

#保存
prs.save(save_path)

終わりに

今回は,Pythonを使って,PowerPointを操作してみました.

今回のスライドは,画像とテキストしか使っていませんが,

今後は,csvファイルからテーブルを読み込んだり,

データフレームを読み込んだりしたいと考えています^^

それでは・・・

Q &A

参考資料

https://qiita.com/kousakulog/items/34855cd8286bd4f33c08

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA