
python-pptxで表・テーブルを自動生成する
- PowerPoint表スライドの自動生成の完全自動化を実現するPythonスクリプトを5ステップで解説
- 「Excelデータの手動コピペ→表更新」という課題を根本から解消する
- Claude Codeへの自然言語指示だけでスクリプトを生成できる
- 月・週・日単位の定期実行で完全無人化を実現する方法も紹介
以下のステップを順番に実行することで、今日から業務自動化を始められます。コピーして使えるコードと、Claude Codeへの指示文をセットで解説します。
PowerPoint の表作成は手動では時間がかかります。Claude Code + python-pptx なら、Excelデータを読み込んで書式付きテーブルスライドを自動生成できます。
ステップ1:書式付きテーブルを自動生成
ヘッダー色付き・交互行カラーのテーブルスライドとして自動生成して
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
import openpyxl
wb = openpyxl.load_workbook("部門実績.xlsx")
ws = wb.active
data = list(ws.iter_rows(values_only=True))
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
slide = prs.slides.add_slide(prs.slide_layouts[6])
NAVY = RGBColor(0x1A, 0x37, 0x6B)
LGRAY = RGBColor(0xF2, 0xF2, 0xF2)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
rows = len(data)
cols = len(data[0]) if data else 0
table = slide.shapes.add_table(
rows, cols, Inches(0.4), Inches(1.2), Inches(12.5), Inches(5.5)
).table
for r, row in enumerate(data):
for c, val in enumerate(row):
cell = table.cell(r, c)
cell.text = str(val) if val is not None else ""
tf = cell.text_frame.paragraphs[0]
if tf.runs:
tf.runs[0].font.size = Pt(10 if r > 0 else 11)
tf.runs[0].font.bold = (r == 0)
tf.runs[0].font.color.rgb = WHITE if r == 0 else RGBColor(0x1A,0x1A,0x2E)
cell.fill.solid()
if r == 0:
cell.fill.fore_color.rgb = NAVY
elif r % 2 == 0:
cell.fill.fore_color.rgb = LGRAY
else:
cell.fill.fore_color.rgb = WHITE
prs.save("テーブルスライド.pptx")
print(f"テーブルスライド生成完了: {rows}行x{cols}列")
ヘッダー紺色・交互グレーの書式付きテーブルを自動生成。手動作成(1時間)がスクリプト実行5秒に。
ステップ2:達成率でセル色を自動変更
from pptx.dml.color import RGBColor
RED_BG = RGBColor(0xFF, 0xE0, 0xE0)
GRN_BG = RGBColor(0xE0, 0xFF, 0xE8)
for r in range(1, rows):
rate_cell = table.cell(r, 3)
try:
rate_str = rate_cell.text.replace("%","").strip()
rate = float(rate_str)
rate_cell.fill.solid()
if rate >= 100:
rate_cell.fill.fore_color.rgb = GRN_BG
elif rate < 80:
rate_cell.fill.fore_color.rgb = RED_BG
except ValueError:
pass
prs.save("テーブルスライド_カラー.pptx")
print("達成率カラーコーディング完了")
達成率100%超=緑・80%未満=赤で自動カラーコーディング。視認性が大幅向上。
ステップ3:複数シートのデータを複数スライドに展開
import openpyxl
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
wb = openpyxl.load_workbook("全部門実績.xlsx")
for sheet in wb.worksheets:
slide = prs.slides.add_slide(prs.slide_layouts[6])
data = list(sheet.iter_rows(values_only=True))
if not data:
continue
# タイトル
tb = slide.shapes.add_textbox(Inches(0.4), Inches(0.2), Inches(12), Inches(0.6))
tb.text_frame.text = f"{sheet.title} 実績テーブル"
tb.text_frame.paragraphs[0].runs[0].font.size = Pt(20)
tb.text_frame.paragraphs[0].runs[0].font.bold = True
rows, cols = len(data), len(data[0])
tbl = slide.shapes.add_table(rows, cols, Inches(0.4), Inches(1.0), Inches(12.5), Inches(5.8)).table
NAVY = RGBColor(0x1A,0x37,0x6B)
for r, row in enumerate(data):
for c, val in enumerate(row):
cell = tbl.cell(r, c)
cell.text = str(val or "")
cell.fill.solid()
cell.fill.fore_color.rgb = NAVY if r == 0 else RGBColor(0xFF,0xFF,0xFF)
prs.save("全部門テーブルスライド.pptx")
print(f"{len(wb.worksheets)}シート分のスライドを生成")
複数シートのデータを複数スライドに一括展開。月次会議用資料作成が完全自動化。
ステップ4:テーブルスライドにグラフを追加
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.dml.color import RGBColor
cd = ChartData()
cd.categories = ["営業部","製品部","管理部","開発部"]
cd.add_series("達成率(%)", [112, 98, 87, 103])
chart = slide.shapes.add_chart(
XL_CHART_TYPE.BAR_CLUSTERED,
Inches(7.5), Inches(1.0), Inches(5.4), Inches(5.8), cd
).chart
chart.series[0].format.fill.solid()
chart.series[0].format.fill.fore_color.rgb = RGBColor(0xC4, 0x3E, 0x1C)
prs.save("テーブル+グラフスライド.pptx")
print("テーブル+グラフスライド完成")
テーブル左・グラフ右の2カラムスライドを自動生成。視覚的なインパクトが向上。
ステップ5:スライドをPDF変換して配布
import subprocess
subprocess.run([
"soffice", "--headless", "--convert-to", "pdf",
"--outdir", ".", "テーブル+グラフスライド.pptx"
], check=True)
print("PDF変換完了 → 配布準備OK")
PowerPointをPDFに自動変換。会議前の配布準備まで完全自動化。
このシステムが解決する課題
データから高品質な表スライドを自動生成。この自動化が特に効果的な場面と、解決できる課題を整理します。
- Excelデータをコピーして表を手作りするのに毎回30分以上かかっている
- データが更新されるたびに表を作り直す手間が発生している
- 表のデザイン(色・フォント・罫線)が担当者によってバラバラになっている
- 大量のデータから「見やすい表」を短時間で作る手法がわからない
実務での活用シナリオ
導入前後の効果比較
ExcelからPowerPointへ手動でコピーペーストして表を作成。列幅・色・フォントを毎回手作業で調整するため1表あたり30分〜1時間かかっていた。データ更新のたびに全て作り直す必要があった。
Pythonがデータを読み込んで表スライドを自動生成。デザインはテンプレートとして定義済みなので毎回一定の品質を維持。データ更新時は再実行するだけで最新表が完成。
導入のポイントと注意事項
- 表のヘッダー行の色は会社のブランドカラーを6桁HEXで定義しておくと毎回一貫したデザインになる
- 列幅は自動計算(テキスト長の最大値)にすると、データ量に関わらず見やすい表が生成される
- python-pptxのTableオブジェクトはセル単位で書式設定できるため、特定の値を赤色表示するなどのハイライトも可能
- 10行以上の表は複数スライドに分割する処理を加えると、印刷時のレイアウト崩れを防止できる
よくある質問(FAQ)
まとめ
✅ Excelデータから書式付きテーブルスライドを自動生成
✅ 達成率に応じたセル色変更を自動化
✅ テーブル+グラフの2カラムスライドを一括作成
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
python-pptxのTableオブジェクトでネイティブ表を生成:add_table()でPowerPointネイティブの表を作成することで、PPT上で編集可能な表になります。画像として貼り付けるより確実にきれいな表が作れます。
- 2
列幅・行高さを自動計算して整える:テキストの長さに応じて列幅を動的に設定するロジックをClaude Codeに実装させることで、長いテキストが切れない適切なサイズの表を自動生成できます。
- 3
記号を条件付きで自動挿入:機能有無を表す記号(○×△等)をTrueとFalseの値から自動変換して表に挿入することで、データから意味のある比較表を自動生成できます。
ビジネスインパクト
この記事のまとめ
- ✅ ExcelデータからPowerPointの比較表・機能マトリクス・料金表を自動生成できる
- ✅ python-pptxのネイティブTableオブジェクトでPPT上で編集可能な表を作成できる
- ✅ Excelコピペ→パワポ整形に30分かかっていた作業がゼロになる
- ✅ データ更新のたびに最新の比較表スライドを自動再生成できる
よくある質問(FAQ)
関連記事