python

【python】Powerpoint(パワーポイント)を操作する【→業務効率UP】

7月 20, 2019

how to control powerpoint by python
プログラム女子
会社のPowerpoint資料の文字だけを取り出したいんだけど...
それなら、pythonを使ってPowerpointの文字列を読み取ることができるよ。さらに、その文字列を使って別のPowerpoint資料を作ることもできるから、今日はその方法を紹介するね。
Tommy

この記事で分かること

  • pythonプログラムでパワーポイントを自動で作成する方法が分かる
  • pythonプログラムでパワーポイントからデータを読み込む方法が分かる

pythonでPowerpoint(パワーポイント)を操作する概要

summary of control powerpoint on python

プレゼン資料などで使われるPowerpointですが、Powerpoint資料の文字列を読み取ってテキストマイニングしたい場合や、あるシステムの処理結果に従ってPowerpoint形式のファイルにアウトプットしたい場合には、パワーポイントをプログラムによって操作する必要があります。

この記事では、pythonを使ったPowerpointファイルの作成方法と、Powerpointファイルからのデータ読み取る方法を説明します。

pythonでPowerpoint(パワーポイント)を操作する前提の環境

environment of control powerpoint on python

Powerpoint(パワーポイント)を操作する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】

続きを見る

pythonでPowerpoint(パワーポイント)を操作するサンプルプログラム

sample program of control powerpoint on python

パワーポイントを操作する為のライブラリのインポート

ここでは、パワーポイント操作するためのライブラリを読み込みます。

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の操作方法

how to control other office file on python

officeには、それぞれ異なる操作方法があります。

下記の記事では、普段の業務で使える、office(パワーポイント、エクセル、ワード)のpythonのプログラムによる操作方法を説明しています。

officeそれぞれの操作方法を、下記の記事を参考に、ご自身のプログラムを作成してみてください。

オススメ
how to control 3 office software by python
【python】オフィス3つの操作方法【→業務効率UP】

続きを見る

pythonで業務効率化するその他の方法

other way of business efficiency by python

この記事では、pythonを使ったPowerpointファイルの作成方法と、Powerpointファイルからのデータ読み取る方法を説明しました。Powerpoint以外にもpythonには、業務効率化できる手段がたくさんあります。

下記の記事に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、ぜひ合わせて読んで取り組んでみてください。

オススメ
8 ways for business efficiency by python
【python】業務効率化の方法8選【→周りを出し抜く自動化】

続きを見る

-python
-

© 2021 Tommy's blog Powered by AFFINGER5