【5分でわかる】PythonでPowerPointの新規作成操作を自動化

 

【悩み】
・PythonでPowerPointの新規作成や編集などの操作はできる?
・パワーポイントをPythonで操作するためのライブラリは?
・PowerPointの操作をPythonを使って自動化したい。



こういった「悩み」に答えます。
 

【本記事の内容】
① Python向けPowerPointライブラリとは?
② PythonでPowerPointの新規作成するための準備
③ PythonでPowerPointを新規作成
④ python-pptxを使う際の注意点



本記事に掲載した手順を実践したことで、30分以内でPowerPointの新規作成の操作をPythonで自動化できました。
 

記事の前半では「Python向けPowerPointライブラリの一覧」と「python-pptxライブラリのダウンロード手順」を解説します。

記事の後半では「PowerPointの新規作成」をPythonで自動化する方法と注意点を紹介します。
 

この記事を読み終えることで、「Pythonでデータ分析した結果などを自動でパワーポイントに転記できる」状態になります。
 

ちなみに、Pythonを使うことで本記事で紹介すること以外にも様々なPowerPointの操作を自動化できます。以下に実現できる範囲をまとめましたので、良ければアクセスしてみてください。

>> Pythonで実現できるPowerPointの操作一覧


 

Python向けPowerPointライブラリとは?


Pythonで使えるPowerPoint関連のライブラリに関してご紹介します。
 

【ご紹介事項】
・PythonでPowerPointを操作できるライブラリ一覧
・OSS:python-pptxとは?できることは?
・商用:aspose.slidesとは?できることは?



以降で、上記の各項目に関して説明します。
 

PythonでPowerPointを操作できるライブラリ一覧

PythonでPowerPointを操作できるライブラリとして、以下があります。
 

【PythonでPowerPointを操作できるライブラリ一覧】
python-pptx(OSS)
aspose.slides(商用)



以降では、各ライブラリの「できること」「ライセンス」「開発頻度」「開発言語」に関して説明します。
 

OSS:python-pptxとは?できることは?

python-pptxライブラリの概要を以下に記載します。
 

【python-pptxとは】
python-pptxは、Python向けライブラリです。
python-pptxを使うことで「無料でPowerPointの作成や編集」ができます。そのため、新規作成などの基本的な操作を無料で自動化できます。



python-pptxライブラリを使ってできる一例としては、「ある文字が記載されたスライドのみを抽出する」が挙げられます。下の動画の「該当スライドをダウンロードボタン」の部分で利用しています。
 



python-pptxのライセンスに関して以下に記載します。
 

【ライセンスについて】
python-pptxのライセンスは、MIT(2022年12月16日時点)です。
特に制限なく、無料で使えます。
参照:MITとは(Wikipedia)



また、python-pptxの「直近でどのぐらい活発に開発されているか?」に関する情報は、以下のサイトから確認できます。
参照:python-pptxの開発頻度(GitHub)
 



上図より、python-pptxは活発に開発されているライブラリではないです。
そのため、脆弱性やバグがあった場合、即座に修正されず、利用者自身でライブラリの修正が必要になると考えられます。
商用で本ライブラリを使う際は、注意してください。
 

ちなみに、python-pptxは、以下の言語で開発されています。
参照:python-pptxの開発言語(GitHub)
 


 

商用:aspose.slidesとは?できることは?

aspose.slidesライブラリの概要を以下に記載します。
 

【aspose.slidesとは】
aspose.slidesは、Python向けライブラリです。
aspose.slidesを使うことで「無料でPowerPointの作成や編集」だけでなく「スライドを画像として保存」などの応用的な操作もできます。



aspose.slidesライブラリを使ってできる一例としては、「スライドごとに図として保存する」という操作を自動化できます(下の動画参照)。
 



aspose.slidesのライセンスに関して以下に記載します。
 

【ライセンスについて】
aspose.slidesはOSSではなく、Aspose社が開発した商用ライブラリです。
評価用に無料で使える機能はありますが、全機能使う場合はお金がかかります。
参照:aspose.slidesの料金プラン



また、aspose.slidesの「直近でどのぐらい活発に開発されているか?」に関する情報は、以下のサイトから確認できます。
参照:aspose.slidesのリリース頻度(pypi)
 



上図より、aspose.slidesは活発に開発されているライブラリに見えます。
そのため、脆弱性やバグがあった場合、即座に修正されると考えられます。

 

PythonでPowerPointの操作を自動化したい場合、2つのライブラリから選択しましょう。基本的な操作であれば、OSSであるpython-pptxを選択すれば問題ないです。


 

PythonでPowerPointの新規作成するための準備


「PythonでPowerPointの新規作成や編集するための準備」に関してご紹介します。
 

【流れ】
手順1:Pythonのインストール
手順2:python-pptxライブラリのインストール
手順3:PowerPointのプレースホルダーを理解



上記の流れで説明します。
 

Pythonのインストール

以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。

>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】

>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照

>> 【環境構築】インストーラーでMacOSにPythonをインストール

 

python-pptxライブラリのインストール

python-pptxライブラリをインストールするために、以下のコマンドを順番に実行してください。

pip install python-pptx
pip list



コマンド実行後、「python-pptx (バージョン)」が表示された場合、「正常にpython-pptxライブラリをインストールできた」と判断できます。
 

PowerPointのプレースホルダーを理解

PowerPointには、以下の「プレースホルダー」という概念があります。このプレースホルダ―を理解すれば、Pythonからより細かく簡単にPowerPointを自動操作できます。
ちなみに英語では、placeholderと表記されます。
 

【プレースホルダ―とは】
この PowerPointプレースホルダー は、コンテンツ (テキスト、グラフィックス、ビデオ) 用のスライド上の事前に書式設定されたコンテナーです。 事前設定された書式を使用すると、スライドを一貫して書式設定しやすくなります。
出典:Microsoftサポートページ



少し分かりにくい説明ですよね。そこで、以下の図にまとめてみました。
 



上図より、プレースホルダーとは、スライド上で文字やグラフなどを入力するための領域のことです。
 

ちなみに、python-pptxでは、19種類のプレースホルダーを使うことができます。使うことができるプレースホルダーの種類は以下の公式サイトをご覧ください。

>> python-pptxで使用可能なプレースホルダーの一覧(公式サイト)


 

以降で、python-pptxを使いPowerPointの新規作成に関する操作を自動化してみましょう。


 

PythonでPowerPointを新規作成


「PythonでPowerPointを新規作成」に関してご紹介します。
 

【ご紹介事項】
・タイトルページ(表紙)の作成
・テキスト作成と文字設定
・リスト作成
・テーブル作成
・画像貼り付け
・テンプレートの利用



以降で、上記の各項目に関して説明します。
 

タイトルページ(表紙)の作成

「タイトルページ(表紙)を作成する」プログラムは、以下となります。

import collections.abc
from pptx import Presentation

prs = Presentation()

# レイアウトを表紙ページに設定
title_slide_layout = prs.slide_layouts[0]

# 表紙ページをスライドへ追加
slide = prs.slides.add_slide(title_slide_layout)

# タイトルを設定
slide.shapes.title.text = 'タイトル'

# サブタイトルを設定
slide.placeholders[1].text = 'サブタイトル'

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-cover.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-cover.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-cover.py



コマンド実行後、以下のような表紙ページを持ったPowerPointが自動で新規作成されます。
 


 

テキスト作成と文字設定

スライドに「テキストボックスを作成し、文字のフォントなどを設定する」プログラムは、以下となります。

import collections.abc
from pptx import Presentation
from pptx.enum.shapes import PP_PLACEHOLDER
from pptx.util import Cm, Pt 
from pptx.dml.color import RGBColor

prs = Presentation()

# レイアウトに白紙を設定
slide_layout = prs.slide_layouts[6]

# スライド追加
slide = prs.slides.add_slide(slide_layout)

# テキストボックスを追加
text_box = slide.shapes.add_textbox(Cm(1), Cm(1), Cm(10), Cm(5))

# テキストボックスの1段落目を設定
first_paragraph = text_box.text_frame
first_paragraph.text = '1段落目のテキストです。'

# テキストボックスの2段落目を設定
second_paragraph = text_box.text_frame.add_paragraph()
second_paragraph.text = '2段落目のテキストです。'
second_paragraph.font.size = Pt(30) # 文字サイズを設定
second_paragraph.font.color.rgb = RGBColor(255, 0, 0) # 文字の色を設定
second_paragraph.font.bold = True # 文字を太くする
second_paragraph.font.name = "Meiryo UI" # フォントを設定

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-add-text.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-add-text.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-add-text.py



コマンド実行後、以下のスライドが自動で新規作成されます。
 



ちなみに、プログラム内で使った関数のリファレンスは以下にあります。
 

テキスト関連の関数リファレンス
>> 公式サイト


 

リスト作成

スライドに「リスト(箇条書き)を作成する」プログラムは、以下となります。

import collections.abc
from pptx import Presentation
from pptx.enum.shapes import PP_PLACEHOLDER

prs = Presentation()

# タイトルとコンテンツのレイアウトを設定
slide_layout = prs.slide_layouts[1]

# スライド追加
slide = prs.slides.add_slide(slide_layout)

# プレースホルダ―を選択
placeholder = slide.placeholders[1]
placeholder.text_frame.text = '箇条書き1'

# 箇条書きを追加
paragraph = placeholder.text_frame.add_paragraph()
paragraph.text = '箇条書き2'
paragraph.level = 1

paragraph = placeholder.text_frame.add_paragraph()
paragraph.text = '箇条書き3'
paragraph.level = 2

paragraph = placeholder.text_frame.add_paragraph()
paragraph.text = '箇条書き4'
paragraph.level = 1

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-list.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-list.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-list.py



コマンド実行後、以下のスライドが自動で新規作成されます。
 



ちなみに、公式サイトでは以下にプログラムが掲載されています。

>> 箇条書きを作成するプログラム(公式サイト)

 

テーブル作成

スライドに「テーブル(表)を作成する」プログラムは、以下となります。

import collections.abc
from pptx import Presentation
from pptx.util import Cm 

prs = Presentation()

# レイアウトに白紙を設定
slide_layout = prs.slide_layouts[6]

# スライド追加
slide = prs.slides.add_slide(slide_layout)

# テーブルの大きさを設定
rows = cols = 2
left = top = Cm(5)
width = Cm(6.0)
height = Cm(0.8)

# テーブルを作成
table = slide.shapes.add_table(rows, cols, left, top, width, height).table

# 列の幅を設定
table.columns[0].width = Cm(5)
table.columns[1].width = Cm(5)

# 列に値を入力
table.cell(0, 0).text = 'テスト1'
table.cell(0, 1).text = 'テスト2'
table.cell(1, 0).text = 'テスト3'
table.cell(1, 1).text = 'テスト4'

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-table.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-table.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-table.py



コマンド実行後、以下のスライドが自動で新規作成されます。
 



ちなみに、プログラム内で使った関数のリファレンスは以下にあります。
 

テーブル(表)関連の関数リファレンス
>> 公式サイト


 

画像貼り付け

スライドに「画像を貼り付ける」プログラムは、以下となります。

import collections.abc
from pptx import Presentation
from pptx.util import Cm 

image_file_path = 'nick-fewings-1SsUquHPNT8-unsplash.jpg' # 画像のPATH(適宜変更)
prs = Presentation()

# タイトルとコンテンツのレイアウトを設定
slide_layout = prs.slide_layouts[1]

# スライド追加
slide = prs.slides.add_slide(slide_layout)

# 1枚目の画像を追加
left = top = Cm(1)
pic = slide.shapes.add_picture(image_file_path, left, top)

# 2枚目の画像を追加
left = Cm(5)
height = Cm(2)
pic = slide.shapes.add_picture(image_file_path, left, top, height=height)

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-add-picture.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-add-picture.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-add-picture.py



コマンド実行後、以下のスライドが自動で新規作成されます。
 



ちなみに、プログラム内で使った関数のリファレンスは以下にあります。
 

画像関連の関数リファレンス
>> 公式サイト


 

テンプレートの利用

新規作成するスライドに好みのデザインテンプレートを適用したい場合は、適用したいデザインテンプレートを別ファイルで事前に用意する必要があります。今回は、以下のデザインテンプレートを用意し、適用してみます。
 



まずは、適用したいデザインテンプレートを選択し、空のPowerPointファイルを作成します。
 



その後、作成したデザインテンプレートをpython-pptxで読み込むことで、お好きなデザインテンプレートを使ったPowerPointを自動で新規作成できます。以下にプログラムを掲載します。

import collections.abc
from pptx import Presentation

prs = Presentation('./template.pptx') # 適用したいデザインテンプレートのpptxファイル

# タイトルのレイアウトを選択
slide_layout = prs.slide_layouts[0]

# スライド追加
slide = prs.slides.add_slide(slide_layout)

# 新規作成(ファイル保存)
prs.save('test.pptx')



上記のプログラムを「python-powerpoint-template.py」というファイル名で保存しましょう。
   

保存した「python-powerpoint-template.py」を実行するために、以下のコマンドを実行してください。

python python-powerpoint-template.py



コマンド実行後、以下のスライドが自動で新規作成されます。
 


 

上記のようにpython-pptxを使うことで、様々なパターンの操作を自動化できます。最後に、使う上で注意するべき点に関して説明しますね。


 

python-pptxを使う際の注意点


「python-pptxを使う際の注意点」に関してご紹介します。
 

【ご紹介事項】
・AttributeError: module ‘collections’ has no attribute ‘abc’の解決方法
・早見表:python-pptxで指定できるスライドのレイアウト一覧



以降で、上記の各項目に関して説明します。
 

AttributeError: module ‘collections’ has no attribute ‘abc’の解決方法

python-pptxの公式サイトやネット上に掲載されたプログラムをそのまま実行できないケースが多々あります。その際には、以下のエラーが頻発します。

C:\Users\user\Dropbox\設定方法\python\パワポ\sample\start-page>python main.py
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\compat\__init__.py", line 10, in <module>
    Container = collections.abc.Container
AttributeError: module 'collections' has no attribute 'abc'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\user\Dropbox\設定方法\python\パワポ\sample\start-page\main.py", line 2, in <module>
    from pptx import Presentation
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\__init__.py", line 14, in <module>
    from pptx.api import Presentation  # noqa
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\api.py", line 15, in <module>
    from .package import Package
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\package.py", line 6, in <module>
    from pptx.opc.package import OpcPackage
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\opc\package.py", line 11, in <module>
    from pptx.compat import is_string, Mapping
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pptx\compat\__init__.py", line 14, in <module>
    Container = collections.Container
AttributeError: module 'collections' has no attribute 'Container'



本エラーの発生原因と解消方法を以下にまとめます。
 

・原因
 collectionsモジュールでContainerという変数や関数がない
・解消方法
 プログラムの1行目に「import collections.abc」を追加する


 

早見表:python-pptxで指定できるスライドのレイアウト一覧

python-pptxでは、「表紙スライド」や「白紙スライド」などのスライドのレイアウトを設定できます。

以下の公式サイトには、詳しくまとめられていなかったので、以下の表にまとめました。
>> スライドのレイアウト一覧(公式サイト)
 

スライドの形式設定番号プログラムの例
タイトルスライド0prs.slide_layouts[0]
タイトルとコンテンツ1prs.slide_layouts[1]
セクション見出し2prs.slide_layouts[2]
2つのコンテンツ3prs.slide_layouts[3]
比較4prs.slide_layouts[4]
タイトルのみ5prs.slide_layouts[5]
白紙6prs.slide_layouts[6]
タイトル付きのコンテンツ7prs.slide_layouts[7]
タイトル付きの図8prs.slide_layouts[8]


 



Pythonを使うことで、PowerPointの新規作成操作を自動化できることを説明しました。このPythonを使うことで、あらゆる業務や作業を自動化できます。
その事例やヒントを知りたい方には、以下の本がオススメです。

 



ちなみに、上記教材の詳細なレビューに関しては、以下のサイトにまとめています。

>> 退屈なことはPythonにやらせように関するレビューの一覧


 

【まとめ】PythonでPowerPointの新規作成操作を自動化


いかがでしたでしょうか?

上記で紹介したpython-pptxライブラリを使うことで、PythonでPowerPointの新規作成に関する操作を自動化できます。

最後にもう一度内容を確認しましょう。
 

【おさらい】
・PythonでPowerPoint向けのライブラリとして2つある
・python-pptxでPowerPointの新規作成の操作をPythonで自動化できる
・python-pptxはOSSであるため無料で使うことができる



本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。

>> IT技術やその学び方を発信しているサイト「駆け出し物語」(本ブログ)
 

コメント