

目次
pythonでPowerpoint(パワーポイント)を操作する概要
プレゼン資料などで使われるPowerpointですが、Powerpoint資料の文字列を読み取ってテキストマイニングしたい場合や、あるシステムの処理結果に従ってPowerpoint形式のファイルにアウトプットしたい場合には、パワーポイントをプログラムによって操作する必要があります。
この記事では、pythonを使ったPowerpointファイルの作成方法と、Powerpointファイルからのデータ読み取る方法を説明します。
pythonでPowerpoint(パワーポイント)を操作する前提の環境
Powerpoint(パワーポイント)を操作する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
-
-
【python】バージョン確認の方法【→プログラミング初心者向け】
続きを見る
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
-
-
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】
続きを見る
pythonでPowerpoint(パワーポイント)を操作するサンプルプログラム
パワーポイントを操作する為のライブラリのインポート
ここでは、パワーポイント操作するためのライブラリを読み込みます。
import pptx
from pptx.util import Pt, Inches
from pptx.dml.color import RGBColor
パワーポイントファイルを作成する
ここでは、パワーポイントのファイルをpythonで作成する手順を説明します。
次の挙げるそれぞれの手順の関数を定義します。
- パワーポイントのオブジェクトを作成する
- スライドのレイアウトを取得する
- スライドを追加する
- スライドのタイトルを設定する
- テキストボックスを追加する
- 表を追加する
- パワーポイントのファイルを保存する
最後に、定義した関数を使って、パワーポイントファィルを作成する例を説明します。
パワーポイントのオブジェクトを作成する
はじめに、パワーポイントのオブジェクトを作成する関数「get_presentation_obj」を定義します。
処理としては、pptx.Presentation()でプレゼンテーションオブジェクトを作成し、作成したプレゼンテーションオブジェクトを返却する処理になります。
# get presentation object
def get_presentation_obj(file=None):
prs = pptx.Presentation(file)
return prs
スライドのレイアウトを取得する
ここでは、スライドのレイアウトを取得する関数「get_slide_layout」を定義します。
引数には、プレゼンテーションオブジェクト(presentation_obj)とレイアウト番号(layout_num)を入力し、レイアウトオブジェクトを返却します。
※このレイアウトオブジェクトは以降で説明するスライドを追加する際に必要になります。
# get slide layout
def get_slide_layout(presentation_obj,layout_num):
title_slide_layout = presentation_obj.slide_layouts[layout_num]
return title_slide_layout
スライドを追加する
ここでは、スライドを追加する関数「add_slide」を定義します。
引数にはプレゼンテーションオブジェクト(presentation_obj)とレイアウトオブジェクト(layout)を入力し、指定されたレイアウトのスライドオブジェクトを返却します。
# add slide to presentation
def add_slide(presentation_obj,layout):
slide = presentation_obj.slides.add_slide(layout)
return slide
スライドのタイトルを設定する
ここでは、スライドのタイトルを設定する関数「set_title_text」を定義します。
引数にはスライドオブジェクト(slide)とタイトル文字列(text)を入力し、スライドにタイトルを設定します。
# set title text
def set_title_text(slide,text):
slide.shapes.title.text = text
テキストボックスを追加する
ここでは、テキストボックスを追加する関数「add_text_box」を定義します。
引数には、下記の8つの引数を取得し、1つ目の引数のスライドオブジェクトに対して、テキストボックスを追加します。
- スライドオブジェクト(slide)
- 入力したいテキスト(text_contents)
- テキストボックスの左位置(left)
- テキストボックスの上位置(top)
- テキストボックスの幅(width)
- テキストボックスの高さ(height)
- 文字の大きさ(font_size)
- テキストボックスの塗りつぶし色(color)
# add text box
def add_text_box(slide,text_contents,left,top,width,height,font_size,color):
text_left = Inches(left/2.54)
text_top = Inches(top/2.54)
text_width = Inches(width/2.54)
text_height = Inches(height/2.54)
text_box = slide.shapes.add_textbox(text_left, text_top, text_width, text_height)
text_box.text = text_contents
text_box.text_frame.paragraphs[0].font.size = Inches(font_size/2.54)
text_box.fill.solid()
text_box.fill.fore_color.rgb = color
表を追加する
ここでは、表を追加する関数「add_table」を定義します。
引数には、下記の7つの引数を取得し、1つ目の引数のスライドに対して、表を追加します。
- スライドオブジェクト(slide)
- 表のデータ(table_data)
- 表の左位置(left)
- 表の上位置(top)
- 表の幅(width)
- 表の高さ(height)
- 文字のサイズ(font_size)
# add table
def add_table(slide,table_data,left,top,width,height,font_size):
rows = len(table_data)
cols = len(table_data[0])
table_left = Inches(left/2.54)
table_top = Inches(top/2.54)
table_width = Inches(width/2.54)
table_height = Inches(height/2.54)
table = slide.shapes.add_table(rows, cols, table_left, table_top, table_width, table_height).table
for i in range(rows):
for j in range(cols):
cell = table.cell(i, j)
cell.text = table_data[i][j]
cell.text_frame.paragraphs[0].font.size = Inches(font_size/2.54)
パワーポイントのファイルを保存する
ここでは、パワーポイントのファイルを保存する関数「save_presentation」を定義します。
引数にはfile_name(ファイル名)を取り、指定されたファイル名でパワーポイントを保存できるようにしています。
# save presentation file
def save_presentation(file_name):
prs_obj.save(file_name)
定義した関数の実行
ここでは、上記に定義した関数を使って、パワーポイントファイルを作成するプログラムを記載します。
スライドは全部で3ページで、「test.pptx」という名前のファイルを作成します。
2スライド目には色が異なるテキストボックスを3つ作成し、それぞれに異なるテキストを入力しています。
3スライド目には、「AAA」から「III」までの文字が書かれた3行3列の表を挿入しています。
if __name__ == '__main__':
prs_obj = get_presentation_obj()
#---1 page---
# set slide layout
title_slide_layout = get_slide_layout(presentation_obj=prs_obj,layout_num=1)
# add slide
added_slide1 = add_slide(presentation_obj=prs_obj,layout=title_slide_layout)
# set title text
set_title_text(slide=added_slide1,text="This is title text!")
#---2 page---
# set slide layout
title_slide_layout = get_slide_layout(presentation_obj=prs_obj,layout_num=1)
# add slide
added_slide2 = add_slide(presentation_obj=prs_obj,layout=title_slide_layout)
# set title text
set_title_text(slide=added_slide2,text="This is title text!")
# add text box
color = RGBColor(100, 255, 255)
add_text_box(
slide=added_slide2,
text_contents="Add text box1",
left=2,
top=5,
width=21,
height=3,
font_size=1,
color=color)
# add text box
color = RGBColor(255, 100, 255)
add_text_box(
slide=added_slide2,
text_contents="Add text box2",
left=2,
top=9,
width=21,
height=3,
font_size=2,
color=color)
# add text box
color = RGBColor(255, 255, 100)
add_text_box(
slide=added_slide2,
text_contents="Add text box3",
left=2,
top=13,
width=21,
height=3,
font_size=3,
color=color)
#---3 page---
# set slide layout
title_slide_layout = get_slide_layout(presentation_obj=prs_obj,layout_num=1)
# add slide
added_slide3 = add_slide(presentation_obj=prs_obj,layout=title_slide_layout)
# set title text
set_title_text(slide=added_slide3,text="This is title text!")
data = [ ["AAA","BBB","CCC"]
,["DDD","EEE","FFF"]
,["GGG","HHH","III"]]
# add table
add_table(
slide=added_slide3,
table_data=data,
left=2,
top=9,
width=21,
height=5,
font_size=1)
# Save powerpoint file
save_presentation(file_name='test.pptx')
パワーポイントファイルのデータを読み込む
次に、パワーポイントファイルに記載されているテキストデータを読み取る方法を説明します。
パワーポイントの読み取りでは、次の挙げるそれぞれの手順の関数を定義します。
- テキストボックスの文字列を読み取る
- 表(テーブル)の文字列を読み取る
- スライドオブジェクトを取得する
最後に、定義した関数を使って、パワーポイントファィルからデータを読み取る例を説明します。
パワーポイントのテキストボックスの文字列を読み取る
ここでは、パワーポイントのテキストボックスの文字列を読み取る関数「read_text_box」を定義します。
引数にslide(スライドオブジェクト)を取り、テキストボックスの文字列を配列extracted_textで返却する関数になります。
# read text box
def read_text_box(slide):
extracted_text = []
for shape in slide.shapes:
if shape.has_text_frame:
extracted_text.append(shape.text)
return extracted_text
パワーポイントのテーブルの文字列を読み取る
ここでは、パワーポイントの表(テーブル)の文字列を読み取る関数「read_table」を定義します。
引数にtable(テーブルオブジェクト)を取り、テーブルから読み取った文字列w2次元の配列ret_arrayで返却するようにしています。
def read_table(table):
ret_array = []
for row in table.rows:
temp_array = []
for cell in row.cells:
temp_array.append(cell.text)
ret_array.append(temp_array)
return ret_array
パワーポイントのスライドオブジェクトを取得する
ここでは、パワーポイントのスライドオブジェクトを取得する関数「get_slide_object」を定義します。
引数に、presentation_obj(プレゼンテーションオブジェクト)とnum(スライド番号)を取り、スライド番号に対応するスライドオブジェクトを返却します。
もし、スライド番号に負の値が入力されたり、存在しないスライド番号が入力された場合には、戻りに「None」を返却します。
# get slide object
def get_slide_object(presentation_obj,num):
if num < 0:
return None
elif len(presentation_obj.slides) > num:
return presentation_obj.slides[num]
else:
return None
定義した関数の実行
実際に上記で定義した関数の呼び出して、パワーポイントの読み取り処理を行います。
また、読み取り対象のパワーポイントファイルは、上で作成した「test.pptx」を使用します。
if __name__ == '__main__':
# get presentation object
r_prs_obj = get_presentation_obj(file='test.pptx')
# text bpx reading
for page,slide in enumerate(r_prs_obj.slides,start=1):
print(page)
print(read_text_box(slide=slide))
# get slide object
target_slide = get_slide_object(presentation_obj=r_prs_obj,num=2)
# read table
for shape in target_slide.shapes:
if shape.has_table:
data = read_table(table=shape.table)
print(data)
pythonで行うその他のofficeの操作方法
officeには、それぞれ異なる操作方法があります。
下記の記事では、普段の業務で使える、office(パワーポイント、エクセル、ワード)のpythonのプログラムによる操作方法を説明しています。
officeそれぞれの操作方法を、下記の記事を参考に、ご自身のプログラムを作成してみてください。
-
-
【python】オフィス3つの操作方法【→業務効率UP】
続きを見る
pythonで業務効率化するその他の方法
この記事では、pythonを使ったPowerpointファイルの作成方法と、Powerpointファイルからのデータ読み取る方法を説明しました。Powerpoint以外にもpythonには、業務効率化できる手段がたくさんあります。
下記の記事に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、ぜひ合わせて読んで取り組んでみてください。
-
-
【python】業務効率化の方法8選【→周りを出し抜く自動化】
続きを見る