【Python】既存のPowerPointスライドを書き換える【python-pptx】

  • 投稿 : 2021-02-15

事前準備

python-pptx

pip install python-pptx

ライブラリを導入してください

テンプレート

https://www.microsoft.com/ja-jp/office/pipc/template/result.aspx?id=14427&pr=pptx
今回使用するテンプレートは上記から入手

テンプレートの確認

構造を調べる

以下のようなコードで、構造を調べます。今回は表の中のテキストを書き換えたいので、表を探します。

1ページには表が1つ[0]、2ページ目には表が2つ[2][3][4]存在してることが分かります。

import pptx
prs = pptx.Presentation('24800_jikanwari.pptx')

print("1ページ目")
slide = prs.slides[0]
for shape in slide.shapes:
    print(shape.has_table)

print("2ページ目")
slide = prs.slides[1]
for shape in slide.shapes:
    print(shape.has_table)

表内のテキストを取得する

表内のテキストを取得してみて、修正したい表なのかを確認します。

import pptx
prs = pptx.Presentation('24800_jikanwari.pptx')

#-------------
# 1ページ目
#-------------

print("1ページ目")

tbl = prs.slides[0].shapes[0].table
for row in tbl.rows:
    values = []
    for cell in row.cells:
        values.append(cell.text)
    print(values)


#-------------
# 2ページ目
#-------------

print("2ページ目")

tbl = prs.slides[1].shapes[4].table
for row in tbl.rows:
    values = []
    for cell in row.cells:
        values.append(cell.text)
    print(values)

表を書き換える

構造がわかって、テキストも取得できてるので、書き換えは簡単だと思います。

import pptx
#-----------
# データ配列
#------------
p1_data =list() 

p1_data=[
['', '', '', '', '', '', ''],
['', '', '', '', '', '', ''],
['', '', '', '', '', '', ''],
['中休み1', '中休み', '中休み', '中休み', '中休み', '', ''],
['', '', '', '', '', '', ''],
['', '', '', '', '', '', ''],
['昼ごはん2', '昼ごはん', '昼ごはん', '昼ごはん', '昼ごはん6', '', ''],
['昼休み3', '昼休み', '昼休み', '昼休み', '昼休み', '', ''],
['', '', '', '', '', '', ''],
['おやつ4', 'おやつ', 'おやつ', 'おやつ', 'おやつ5', '', ''],
['', '', '', '', '', '', ''],
]

p2_data =list() 

p2_data =[
['', ''],
['', ''],
['', ''],
['中休み1', ''],
['', ''],
['', ''],
['昼ごはん2', ''],
['昼休み3', ''],
['', ''],
['おやつ', ''],
['', ''],
]

#-----------
# 
#------------
prs = pptx.Presentation('24800_jikanwari.pptx')

# 1ページ目
tbl = prs.slides[0].shapes[0].table
for i in range(len(p1_data)):
    for j in range(len(p1_data[i])):
       tbl.cell(i, j).text =str(p1_data[i][j])

# 2ページ目
tbl = prs.slides[1].shapes[4].table
for i in range(len(p2_data)):
    for j in range(len(p2_data[i])):
       tbl.cell(i, j).text =str(p2_data[i][j])

#----------
# ファイル出力
#----------
prs.save('test04.pptx')

CSVファイルから読み込む

1つめのデータ配列をCSVファイルから読むこむように修正してみました

import pptx
import csv

#-----------
# データ配列
#------------

# CSVデータを読み込んで配列に
p1_data =list() 
with open('.\data.csv') as f:
    reader = csv.reader(f)
    p1_data = [row for row in reader]

#
p2_data =list() 

p2_data =[
['', ''],
['', ''],
['', ''],
['中休み1', ''],
['', ''],
['', ''],
['昼ごはん2', ''],
['昼休み3', ''],
['', ''],
['おやつ', ''],
['', ''],
]

# 残りは同じ

動画での説明

スポンサーリンク