【Python】パワポ自動化の基礎:スライド内オブジェクトの自動判別と動的データ編集・サイズ変更
PythonでPowerPointを操作する「python-pptx」を用い、スライド内に混在する各種オブジェクトを自動検出し、要素に応じた個別操作を行う手法を解説します。実務におけるドキュメント生成では、表へのデータ挿入、画像のサイズ変更、既存テキストボックスへの文章追記など、要素ごとに異なる処理を施す場面が多くあります。オブジェクトの種類を判別し制御を行うコードで書き留めておきます。
from pathlib import Path
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
from pptx.util import Inches
# ==========================================
# 準備:ファイルの読み込み
# ==========================================
# ※ 実行する際は、スクリプトと同じフォルダに「template.pptx」を用意してください。
template_path = Path("template.pptx")
if not template_path.exists():
raise FileNotFoundError(f"ファイルが見つかりません: {template_path}")
prs = Presentation(str(template_path))
# 操作対象のスライドを指定(例として1ページ目:index=0 を操作)
slide_to_check = prs.slides[0]
print("--- スライド内のオブジェクト探索と操作開始 ---")
# スライド上に配置されているすべてのオブジェクト(図形、テキスト、表など)をループで処理
for shape in slide_to_check.shapes:
# 1. 表(Table)を検出した場合
if shape.shape_type == MSO_SHAPE_TYPE.TABLE:
print("➔ 【表(Table)】を検出しました。")
tbl = shape.table
# 【追加操作】0行目・0列目(一番左上のセル)を取得
cell = tbl.cell(0, 0)
# セルにテキストを代入(※元の書式やフォントはリセットされます)
cell.text = "更新データ"
print(" [操作] 表の左上(0行0列)のセルに '更新データ' を挿入しました。")
# 2. 画像(Picture)を検出した場合
elif shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
print("➔ 【画像(Picture)】を検出しました。")
# 【追加操作】画像の横幅(width)を 5インチ に変更
# ※縦横比(アスペクト比)を維持したまま、縦幅も自動的に縮尺されます
shape.width = Inches(5.0)
print(" [操作] 画像の横幅を 5インチ に変更しました(縦横比は維持されます)。")
# 3. テキストボックスを検出した場合
elif shape.shape_type == MSO_SHAPE_TYPE.TEXT_BOX:
print(f"➔ 【テキストボックス】を検出しました。文字数: {len(shape.text)}")
# 【追加操作】既存の文章の後ろに、改行を挟んでテキストを追記
# text_frame.add_paragraph() で新しい段落を追加し、そこに文字をセットします
tf = shape.text_frame
new_paragraph = tf.add_paragraph()
new_paragraph.text = "(プログラムによって追記されたテキスト)"
print(" [操作] テキストボックスに新しい段落を追記しました。")
# 4. その他の図形の場合
else:
print(f"➔ 【その他の図形(タイプID: {shape.shape_type})】を検出しました。特になにもしません。")
# ==========================================
# 完了:別名で保存
# ==========================================
output_path = Path("object_modified_output.pptx")
prs.save(str(output_path))
print("---------------------------------------")
print(f"オブジェクトの個別操作が完了しました。保存先: {output_path}")
スポンサーリンク