pptx について
pptxは、PowerPointプレゼンテーションの作成、読み取り、編集を行うスキルです。制作作業を自動化したいユーザー向けに、HTML変換、一括生成、テキスト抽出、OOXMLの解析・編集を扱います。
主な機能
- 01HTMLからPPTを作成
- 02テンプレートやデータからスライドを一括生成
- 03テキスト、コメント、発表者ノートを抽出
- 04スライドの内容、レイアウト、テーマを編集
- 05OOXMLファイルの展開と再パッケージ
活用シーン
- 01HTMLやデータからレポート用プレゼンを作成
- 02製品や営業資料のスライドを一括生成
- 03発表者ノートやコメントを抽出
- 04既存PPTの内容やテーマを変更
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ stvlynn/ dingtalk-wukong-skills --skill pptxインストール後、Claude Code で/pptxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
docs/00-SKILL-完整制作指南.mdooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsdopc-coreProperties.xsdopc-digSig.xsdopc-relationships.xsdooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsddml-chartDrawing.xsddml-diagram.xsddml-lockedCanvas.xsddml-main.xsddml-picture.xsddml-spreadsheetDrawing.xsddml-wordprocessingDrawing.xsdpml.xsdshared-additionalCharacteristics.xsdshared-bibliography.xsdshared-commonSimpleTypes.xsdshared-customXmlDataProperties.xsdshared-customXmlSchemaProperties.xsdshared-documentPropertiesCustom.xsdshared-documentPropertiesExtended.xsdshared-documentPropertiesVariantTypes.xsdshared-math.xsdshared-relationshipReference.xsdsml.xsdvml-main.xsdvml-officeDrawing.xsdvml-presentationDrawing.xsdvml-spreadsheetDrawing.xsdvml-wordprocessingDrawing.xsd詳細
PPTプレゼンテーション処理エキスパート Real Skill
一言で説明
HTMLから洗練されたPPTを自動生成し、プレゼンテーションの編集、コメントの管理、コンテンツの抽出に対応します。
プレゼンテーションの作成と編集 - HTMLからのプレゼンテーション作成、コンテンツの編集、コメントの管理、テキストの抽出。
使用シーン
適しています:
- データ/HTMLから標準化されたPPTレポートを自動生成する
- 洗練されたプレゼンテーションを作成する(営業、研修、報告)
- PPTのテキスト、コメント、発表者ノートを抽出する
- スライドの内容、レイアウト、テーマを変更する
- 複数のプレゼンテーションを一括生成する
適していません:
- 複雑なアニメーションの作成(専門ソフトウェアを使用してください)
- リアルタイムの共同編集(リアルタイム共同編集には Google Slides を使用してください)
コアワークフロー
用户需求 → 内容分析 → 配色选择 → 工具选择 → 生成 PPT → 验证输出
User request → Content analysis → Color palette → Tool selection → Generate PPT → Validate
タスクの種類の判定:
プレゼンテーションの作成
-
HTMLからPPTへのワークフロー(推奨)
- スタイルを設定したHTMLスライドを作成する
- html2pptxライブラリを使用して変換する
- 正確な位置指定と書式設定が可能
- Webセーフフォントのみを使用する(Arial、Helvetica、Georgiaなど)
-
Python-PPTXワークフロー
- プログラムによるスライド作成
- データから一括生成
- テンプレートベースの自動化
読み取りと分析
- テキスト抽出 → markitdown(Markdownに変換)
- コメントとノート → OOXMLを展開してXMLを読み取る
- デザイン分析 → XMLからテーマ、色、フォントを抽出する
既存文書の編集
- 簡単な編集 → python-pptxライブラリ
- 複雑な編集 → OOXMLを展開し、XMLを変更して再パッケージ化する
タスク完了基準
必須条件(すべて満たす必要があります):
- PPTが正常に開き、再生できる
- スライドの内容が明瞭で読みやすい
- 配色に調和があり、視覚的な階層が明確である
- レイアウトが適切で、文字が詰め込まれていない
品質評価:
- ⭐⭐⭐⭐⭐ 優秀 - 洗練されたデザイン+完全な内容+自動生成
- ⭐⭐⭐ 合格 - 正確な内容+使用可能なPPT+適切な書式
- ⭐ 失敗 - PPTが破損している、または内容に誤りがある
参考資料(AI向け)
| 種類 | パス | 説明 |
|---|---|---|
| コアドキュメント | docs/00-SKILL-完整制作指南.md | PPT作成の完全ガイド(約500行) |
| OOXMLライブラリ | ooxml/ | 低レベルのXML操作 |
| ユーティリティスクリプト | scripts/unpack.py | PPTXファイルを展開 |
| ユーティリティスクリプト | scripts/pack.py | PPTXファイルをパッケージ化 |
重要な原則(AI必読)
1. デザイン優先 - コンテンツに基づくアプローチ(デザイン先行)
重要:プレゼンテーションを作成する前に、必ずコンテンツを分析してください。
- 主題を考慮する:何についての内容か?トーン、業界、雰囲気はどうか?
- ブランドを確認する:企業名が言及されている場合は、ブランドカラーを考慮する
- コンテンツに合わせて配色する:主題を反映する色を選ぶ
- アプローチを明示する:コードを書く前に、デザイン上の選択について説明する
2. Webセーフフォントのみを使用
使用可能なフォント:Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
- カスタムフォントは使用しない:正しく表示されません
- フォントの組み合わせ:プレゼンテーションごとに最大2~3種類のフォントを使用する
3. 視覚的な階層
- サイズに大きな差をつける:見出しは72pt、本文は11pt
- 太さに変化をつける:見出しは太字、本文は標準、キャプションは細字
- 色で強調する:重要な情報にはアクセントカラーを使用する
- 明確な構成にする:タイトル → メインコンテンツ → 補足情報
4. グラフと表のレイアウトルール
推奨 - 2カラムレイアウト:
- ヘッダーをスライド全体の幅に配置する
- 片方のカラムにテキスト/箇条書き(40%)、もう片方にグラフ/表(60%)を配置する
- バランスと読みやすさが向上します
代替案 - 全面レイアウト:
- インパクトを最大化するため、グラフ/表をスライド全体に配置する
縦方向に積み重ねない:
- ❌ 1カラム内で、テキストの下にグラフ/表を配置しない
- ❌ 読みやすさが損なわれ、レイアウト上の問題が生じます
5. 配色の選択(18種類の配色案)
既定の配色にとらわれない:このトピックに本当に合う色は何か? 複数の観点から検討する:トピック、業界、雰囲気、活気、対象者、ブランド 大胆に選ぶ:医療だから緑、金融だから紺でなければならないわけではありません
厳選された18種類の配色案
ビジネス・プロフェッショナル
- クラシックブルー:ネイビー(#1C2833)、スレート(#2E4053)、シルバー(#AAB7B8)、オフホワイト(#F4F6F6)
- ブラック&ゴールド:ゴールド(#BF9A4A)、ブラック(#000000)、クリーム(#F4F6F6)
- チャコール&レッド:チャコール(#292929)、レッド(#E33737)、ライトグレー(#CCCBCB)
クリエイティブ&活気 (创意/活力)
- ティール&コーラル: ティール (#5EA8A7)、ディープティール (#277884)、コーラル (#FE4447)、ホワイト (#FFFFFF)
- レトロなレインボー: パープル (#722880)、ピンク (#D72D51)、オレンジ (#EB5C18)、アンバー (#F08800)、ゴールド (#DEB600)
- ビビッドオレンジ: オレンジ (#F96D00)、ライトグレー (#F2F2F2)、チャコール (#222831)
- 大胆なレッド: レッド (#C0392B)、ブライトレッド (#E74C3C)、オレンジ (#F39C12)、イエロー (#F1C40F)、グリーン (#2ECC71)
ナチュラル&暖色系 (自然/温暖)
- セージ&テラコッタ: セージ (#87A96B)、テラコッタ (#E07A5F)、クリーム (#F4F1DE)、チャコール (#2C2C2C)
- フォレストグリーン: ブラック (#191A19)、グリーン (#4E9F3D)、ダークグリーン (#1E5128)、ホワイト (#FFFFFF)
- ヴィンテージアースカラー: マスタード (#E3B448)、セージ (#CBD18F)、フォレストグリーン (#3A6B35)、クリーム (#F4F1DE)
- クリーム&フォレスト: クリーム (#FFE1C7)、フォレストグリーン (#40695B)、ホワイト (#FCFCFC)
エレガント&ソフト (优雅/柔和)
- ウォームブラッシュ: モーヴ (#A49393)、ブラッシュ (#EED6D3)、ローズ (#E8B4B8)、クリーム (#FAF7F2)
- コースタルローズ: オールドローズ (#AD7670)、ビーバー (#B49886)、エッグシェル (#F3ECDC)、アッシュグレー (#BFD5BE)
- ピンク&パープル: ピンク (#F8275B)、コーラル (#FF574A)、ローズ (#FF737D)、パープル (#3D2F68)
ラグジュアリー&大胆 (奢华/大胆)
- バーガンディラグジュアリー: バーガンディ (#5D1D2E)、クリムゾン (#951233)、ラスト (#C15937)、ゴールド (#997929)
- ディープパープル&エメラルド: パープル (#B165FB)、ダークブルー (#181B24)、エメラルド (#40695B)、ホワイト (#FFFFFF)
フレッシュ&モダン (清新/现代)
- ライム&プラム: ライム (#C5DE82)、プラム (#7C3A5F)、コーラル (#FD8C6E)、ブルーグレー (#98ACB5)
- オレンジ&ターコイズ: ライトオレンジ (#FC993E)、グレイッシュターコイズ (#667C6F)、ホワイト (#FCFCFC)
クイックコマンドリファレンス (Quick Commands)
テキスト抽出 (文本提取)
# Convert PPTX to markdown
python -m markitdown presentation.pptx
シンプルなプレゼンテーションの作成 (创建简单演示文稿)
from pptx import Presentation
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[0]) # Title slide
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Hello World!"
subtitle.text = "My First Presentation"
prs.save("output.pptx")
分析用に PPTX を展開 (解压分析)
# Unpack PPTX to access raw XML
python ooxml/scripts/unpack.py presentation.pptx output_dir
# Key files to examine:
# ppt/presentation.xml - Main metadata
# ppt/slides/slide1.xml - Individual slide contents
# ppt/theme/theme1.xml - Theme colors and fonts
# ppt/comments/ - Comments
# ppt/notesSlides/ - Speaker notes
編集後に再パッケージ化 (编辑后打包)
# Pack modified XML back to PPTX
python ooxml/scripts/pack.py output_dir new_presentation.pptx
HTML から PPT へのワークフロー (HTML 转 PPT)
# Step 1: Write HTML slides
html_content = """
<!DOCTYPE html>
<html>
<head>
<style>
.slide { width: 960px; height: 720px; padding: 40px; }
h1 { font-family: Arial; font-size: 48px; color: #1C2833; }
p { font-family: Arial; font-size: 24px; color: #2E4053; }
</style>
</head>
<body>
<div class="slide">
<h1>Welcome</h1>
<p>This is my presentation</p>
</div>
</body>
</html>
"""
# Step 2: Convert to PPTX
from html2pptx import html2pptx
with open("slides.html", "w") as f:
f.write(html_content)
html2pptx("slides.html", "output.pptx")
依存関係のインストール (Dependencies Installation)
Python の依存関係
pip install -r requirements.txt
# Includes: python-pptx, html2pptx, markitdown
よくあるシナリオの例 (Common Scenarios)
シナリオ 1: プロフェッショナルなタイトルスライドを作成 (创建专业标题页)
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6]) # Blank layout
# Add title
left = Inches(1)
top = Inches(2.5)
width = Inches(8)
height = Inches(1.5)
title_box = slide.shapes.add_textbox(left, top, width, height)
title_frame = title_box.text_frame
title_frame.text = "2024 Sales Report"
# Format title
title_para = title_frame.paragraphs[0]
title_para.font.size = Pt(72)
title_para.font.bold = True
title_para.font.color.rgb = RGBColor(28, 40, 51) # Navy
# Add subtitle
subtitle_box = slide.shapes.add_textbox(left, Inches(4), width, Inches(0.5))
subtitle_frame = subtitle_box.text_frame
subtitle_frame.text = "Q4 Performance Review"
subtitle_para = subtitle_frame.paragraphs[0]
subtitle_para.font.size = Pt(24)
subtitle_para.font.color.rgb = RGBColor(46, 64, 83) # Slate
prs.save("title_slide.pptx")
シナリオ 2: すべての発表者ノートを抽出 (提取所有演讲者备注)
# Step 1: Unpack PPTX
python ooxml/scripts/unpack.py presentation.pptx unpacked/
# Step 2: Extract notes using grep
cd unpacked/ppt/notesSlides/
grep -r "a:t>" . | sed 's/<[^>]*>//g' > ../../all_notes.txt
シナリオ 3: データからスライドを一括生成 (批量生成幻灯片)
from pptx import Presentation
from pptx.util import Inches, Pt
data = [
{"name": "Product A", "sales": 1200, "growth": "15%"},
{"name": "Product B", "sales": 980, "growth": "8%"},
{"name": "Product C", "sales": 1450, "growth": "22%"}
]
prs = Presentation()
for item in data:
slide = prs.slides.add_slide(prs.slide_layouts[1]) # Title and content
title = slide.shapes.title
title.text = item["name"]
body = slide.placeholders[1]
tf = body.text_frame
tf.text = f"Sales: ${item['sales']}M"
p = tf.add_paragraph()
p.text = f"Growth: {item['growth']}"
p.level = 1
prs.save("batch_report.pptx")
コメント
Markdown 対応