PPTX作成・編集・分析
概要
ユーザーが.pptxファイルの作成、編集、または内容分析を依頼する場合があります。.pptxファイルは本質的にZIPアーカイブであり、XMLファイルやその他のリソースが含まれており、これらを読み取ったり編集したりできます。タスクに応じて、利用可能なツールとワークフローが異なります。
内容の読み取りと分析
テキスト抽出
プレゼンテーションのテキスト内容を読み取るだけでよい場合は、ドキュメントをマークダウンに変換します。
# ドキュメントをマークダウンに変換
python -m markitdown path-to-file.pptx
生XMLへのアクセス
コメント、スピーカーノート、スライドレイアウト、アニメーション、デザイン要素、複雑な書式設定には、生XMLへのアクセスが必要です。これらの機能のいずれかを使用するには、プレゼンテーションを展開し、その生のXML内容を読み取る必要があります。
ファイルの展開
python ooxml/scripts/unpack.py <office_file> <output_dir>
注: unpack.pyスクリプトは、プロジェクトルートからの相対パスskills/pptx/ooxml/scripts/unpack.pyにあります。このパスにスクリプトが存在しない場合は、find . -name "unpack.py"を使用して場所を特定します。
主要なファイル構造
ppt/presentation.xml- メインのプレゼンテーションメタデータとスライド参照ppt/slides/slide{N}.xml- 個々のスライドの内容(slide1.xml、slide2.xmlなど)ppt/notesSlides/notesSlide{N}.xml- 各スライドのスピーカーノートppt/comments/modernComment_*.xml- 特定のスライドに対するコメントppt/slideLayouts/- スライドのレイアウトテンプレートppt/slideMasters/- マスタースライドテンプレートppt/theme/- テーマとスタイル情報ppt/media/- 画像やその他のメディアファイル
タイポグラフィと色の抽出
エミュレートするデザインの例が与えられた場合: 以下の方法を使用して、最初にプレゼンテーションのタイポグラフィと色を常に分析します。
- テーマファイルを読む:
ppt/theme/theme1.xmlで色(<a:clrScheme>)とフォント(<a:fontScheme>)を確認します。 - スライド内容をサンプリングする:
ppt/slides/slide1.xmlで実際のフォント使用状況(<a:rPr>)と色を調べます。 - パターンを検索する: grepを使用して、すべてのXMLファイルにわたって色(
<a:solidFill>、<a:srgbClr>)とフォントの参照を検索します。
テンプレートなしで新しいPowerPointプレゼンテーションを作成する
新しいPowerPointプレゼンテーションをゼロから作成する場合は、html2pptxワークフローを使用して、HTMLスライドを正確な配置でPowerPointに変換します。
デザイン原則
重要: プレゼンテーションを作成する前に、内容を分析し、適切なデザイン要素を選択します。
- 主題を考慮する: このプレゼンテーションは何についてですか?それが示唆するトーン、業界、ムードは何ですか?
- ブランディングを確認する: ユーザーが企業/組織に言及している場合、そのブランドカラーとアイデンティティを考慮します。
- パレットを内容に合わせる: 主題を反映する色を選択します。
- アプローチを明示する: コードを書く前に、デザインの選択を説明します。
要件:
- ✅ コードを書く前に、内容に基づいたデザインアプローチを説明する
- ✅ ウェブセーフフォントのみを使用する: Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
- ✅ サイズ、太さ、色を通じて明確な視覚的階層を作成する
- ✅ 読みやすさを確保する: 強いコントラスト、適切なサイズのテキスト、クリーンな配置
- ✅ 一貫性を保つ: スライド間でパターン、間隔、視覚言語を繰り返す
カラーパレットの選択
創造的な色の選び方:
- デフォルトの枠を超えて考える: この特定のトピックに本当に合う色は何ですか?自動操縦的な選択は避けてください。
- 複数の角度を考慮する: トピック、業界、ムード、エネルギーレベル、ターゲットオーディエンス、ブランドアイデンティティ(言及されている場合)
- 冒険的になる: 予想外の組み合わせを試してください - ヘルスケアのプレゼンテーションが緑色である必要はなく、金融がネイビーである必要もありません。
- パレットを構築する: 一緒に機能する3〜5色を選択します(支配的な色 + 補助的な色調 + アクセント)
- コントラストを確保する: テキストが背景で明確に読み取れる必要があります。
カラーパレットの例(創造性を刺激するために使用 - 選択、適応、または独自のものを作成):
- クラシックブルー: ダークネイビー (#1C2833)、スレートグレー (#2E4053)、シルバー (#AAB7B8)、オフホワイト (#F4F6F6)
- ティール&コーラル: ティール (#5EA8A7)、ダークティール (#277884)、コーラル (#FE4447)、ホワイト (#FFFFFF)
- ボールドレッド: レッド (#C0392B)、ブライトレッド (#E74C3C)、オレンジ (#F39C12)、イエロー (#F1C40F)、グリーン (#2ECC71)
- ウォームブラッシュ: モーヴ (#A49393)、ブラッシュ (#EED6D3)、ローズ (#E8B4B8)、クリーム (#FAF7F2)
- バーガンディラグジュアリー: バーガンディ (#5D1D2E)、クリムゾン (#951233)、ラスト (#C15937)、ゴールド (#997929)
- ディープパープル&エメラルド: パープル (#B165FB)、ダークブルー (#181B24)、エメラルド (#40695B)、ホワイト (#FFFFFF)
- クリーム&フォレストグリーン: クリーム (#FFE1C7)、フォレストグリーン (#40695B)、ホワイト (#FCFCFC)
- ピンク&パープル: ピンク (#F8275B)、コーラル (#FF574A)、ローズ (#FF737D)、パープル (#3D2F68)
- ライム&プラム: ライム (#C5DE82)、プラム (#7C3A5F)、コーラル (#FD8C6E)、ブルーグレー (#98ACB5)
- ブラック&ゴールド: ゴールド (#BF9A4A)、ブラック (#000000)、クリーム (#F4F6F6)
- セージ&テラコッタ: セージ (#87A96B)、テラコッタ (#E07A5F)、クリーム (#F4F1DE)、チャコール (#2C2C2C)
- チャコール&レッド: チャコール (#292929)、レッド (#E33737)、ライトグレー (#CCCBCB)
- ビビッドオレンジ: オレンジ (#F96D00)、ライトグレー (#F2F2F2)、チャコール (#222831)
- フォレストグリーン: ブラック (#191A19)、グリーン (#4E9F3D)、ダークグリーン (#1E5128)、ホワイト (#FFFFFF)
- レトロレインボー: パープル (#722880)、ピンク (#D72D51)、オレンジ (#EB5C18)、アンバー (#F08800)、ゴールド (#DEB600)
- ビンテージアーシー: マスタード (#E3B448)、セージ (#CBD18F)、フォレストグリーン (#3A6B35)、クリーム (#F4F1DE)
- コースタルローズ: オールドローズ (#AD7670)、ビーバー (#B49886)、エッグシェル (#F3ECDC)、アッシュグレー (#BFD5BE)
- オレンジ&ターコイズ: ライトオレンジ (#FC993E)、グレイッシュターコイズ (#667C6F)、ホワイト (#FCFCFC)
ビジュアル詳細オプション
幾何学模様:
- 水平ではなく斜めのセクション区切り
- 非対称の列幅(30/70、40/60、25/75)
- 90°または270°で回転したテキストヘッダー
- 画像用の円形/六角形のフレーム
- コーナーの三角形のアクセント形状
- 奥行きを出すための重なり合う形状
境界線とフレームの処理:
- 片側のみの太い単色境界線(10-20pt)
- 対照的な色の二重線境界線
- 完全なフレームの代わりにコーナーブラケット
- L字型の境界線(上部+左側または下部+右側)
- ヘッダーの下のアンダーラインアクセント(3-5ptの太さ)
タイポグラフィ処理:
- 極端なサイズのコントラスト(72ptの見出し vs 11ptの本文)
- 広い文字間隔のオールキャップスヘッダー
- 特大のディスプレイタイプの番号付きセクション
- データ/統計/技術コンテンツ用のモノスペース(Courier New)
- 密度の高い情報用の凝縮フォント(Arial Narrow)
- 強調のためのアウトラインテキスト
チャートとデータのスタイリング:
- 主要データの単一アクセントカラーによるモノクロチャート
- 縦棒の代わりに横棒グラフ
- 棒グラフの代わりにドットプロット
- 最小限のグリッド線、またはなし
- 要素に直接データラベル(凡例なし)
- 主要指標の特大の数字
レイアウトの革新:
- テキストオーバーレイ付きのフルブリード画像
- ナビゲーション/コンテキスト用のサイドバー列(20-30%幅)
- モジュラーグリッドシステム(3×3、4×4ブロック)
- ZパターンまたはFパターンのコンテンツフロー
- 色付き形状上のフローティングテキストボックス
- 雑誌スタイルのマルチカラムレイアウト
背景処理:
- スライドの40-60%を占めるソリッドカラーブロック
- グラデーション塗りつぶし(垂直または斜めのみ)
- 分割背景(2色、斜めまたは垂直)
- 端から端までのカラーバンド
- デザイン要素としてのネガティブスペース
レイアウトのヒント
チャートや表を含むスライドを作成する場合:
- 2列レイアウト(推奨): 全幅にわたるヘッダーを使用し、その下に2列(一方にテキスト/箇条書き、もう一方に注目コンテンツ)を配置します。これにより、バランスが良くなり、チャート/表が読みやすくなります。各コンテンツタイプのスペースを最適化するために、不均等な列幅(例:40%/60%の分割)でフレックスボックスを使用します。
- 全画面レイアウト: 注目コンテンツ(チャート/表)をスライド全体に表示し、最大のインパクトと読みやすさを実現します。
- 絶対に縦に重ねない: チャート/表をテキストの下の単一列に配置しないでください。これにより、読みやすさとレイアウトが低下します。
ワークフロー
- 必須 - ファイル全体を読む:
html2pptx.mdを最初から最後まで完全に読んでください。このファイルを読む際には、範囲制限を決して設定しないでください。 プレゼンテーションの作成を進める前に、詳細な構文、重要な書式設定ルール、ベストプラクティスについて、ファイルの内容全体を読んでください。 - 各スライドに対して、適切な寸法(例:16:9の場合は720pt×405pt)のHTMLファイルを作成します。
- すべてのテキストコンテンツには
<p>、<h1>-<h6>、<ul>、<ol>を使用します。 - チャート/表が追加される領域には
class="placeholder"を使用します(視認性のためにグレーの背景でレンダリングします)。 - 重要: グラデーションとアイコンは、まずSharpを使用してPNG画像としてラスタライズし、次にHTMLで参照します。
- レイアウト: チャート/表/画像を含むスライドの場合、読みやすさを向上させるために、全画面レイアウトまたは2列レイアウトを使用します。
- すべてのテキストコンテンツには
html2pptx.jsライブラリを使用してHTMLスライドをPowerPointに変換し、プレゼンテーションを保存するJavaScriptファイルを作成して実行します。html2pptx()関数を使用して各HTMLファイルを処理します。- PptxGenJS APIを使用して、プレースホルダー領域にチャートと表を追加します。
pptx.writeFile()を使用してプレゼンテーションを保存します。
- 視覚的検証: サムネイルを生成し、レイアウトの問題を検査します。
- サムネイルグリッドを作成:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - サムネイル画像を注意深く読み取り、以下の点を確認します。
- テキストの途切れ: テキストがヘッダーバー、形状、またはスライドの端で途切れていないか。
- テキストの重なり: テキストが他のテキストや形状と重なっていないか。
- 配置の問題: コンテンツがスライドの境界や他の要素に近すぎないか。
- コントラストの問題: テキストと背景の間に十分なコントラストがないか。
- 問題が見つかった場合は、HTMLのマージン/間隔/色を調整し、プレゼンテーションを再生成します。
- すべてのスライドが視覚的に正しくなるまで繰り返します。
- サムネイルグリッドを作成:
既存のPowerPointプレゼンテーションの編集
既存のPowerPointプレゼンテーションのスライドを編集する場合、生のOffice Open XML(OOXML)形式で作業する必要があります。これには、.pptxファイルの展開、XMLコンテンツの編集、再パッキングが含まれます。
ワークフロー
- 必須 - ファイル全体を読む:
ooxml.md(約500行)を最初から最後まで完全に読んでください。このファイルを読む際には、範囲制限を決して設定しないでください。 プレゼンテーションの編集を開始する前に、OOXML構造と編集ワークフローに関する詳細なガイダンスについて、ファイルの内容全体を読んでください。 - プレゼンテーションを展開:
python ooxml/scripts/unpack.py <office_file> <output_dir> - XMLファイル(主に
ppt/slides/slide{N}.xmlと関連ファイル)を編集します。 - 重要: 編集後すぐに検証し、先に進む前に検証エラーを修正します:
python ooxml/scripts/validate.py <dir> --original <file> - 最終的なプレゼンテーションをパッキング:
python ooxml/scripts/pack.py <input_directory> <office_file>
テンプレートを使用して新しいPowerPointプレゼンテーションを作成する
既存のテンプレートのデザインに従うプレゼンテーションを作成する必要がある場合は、テンプレートスライドを複製して再配置し、プレースホルダーのコンテキストを置き換える必要があります。
ワークフロー
-
テンプレートテキストの抽出と視覚的なサムネイルグリッドの作成:
- テキストの抽出:
python -m markitdown template.pptx > template-content.md template-content.mdを読む: テンプレートプレゼンテーションの内容を理解するために、ファイル全体を読んでください。このファイルを読む際には、範囲制限を決して設定しないでください。- サムネイルグリッドの作成:
python scripts/thumbnail.py template.pptx - サムネイルグリッドの作成セクションの詳細を参照してください。
- テキストの抽出:
-
テンプレートを分析し、インベントリをファイルに保存:
- 視覚的分析: サムネイルグリッドを確認して、スライドレイアウト、デザインパターン、視覚的構造を理解します。
- テンプレートインベントリファイルを
template-inventory.mdに作成して保存します。これには以下を含めます。# テンプレートインベントリ分析 **全スライド数: [count]** **重要: スライドは0からインデックスが付けられます(最初のスライド=0、最後のスライド=count-1)** ## [カテゴリ名] - スライド0: [利用可能な場合のレイアウトコード] - 説明/目的 - スライド1: [レイアウトコード] - 説明/目的 - スライド2: [レイアウトコード] - 説明/目的 [... すべてのスライドを個別にインデックスとともにリストする必要があります ...] - サムネイルグリッドの使用: 視覚的なサムネイルを参照して以下を特定します。
- レイアウトパターン(タイトルスライド、コンテンツレイアウト、セクション区切り)
- 画像プレースホルダーの位置と数
- スライドグループ全体のデザインの一貫性
- 視覚的な階層と構造
- このインベントリファイルは、次のステップで適切なテンプレートを選択するために必須です。
-
テンプレートインベントリに基づいてプレゼンテーションの概要を作成:
- ステップ2で利用可能なテンプレートを確認します。
- 最初のスライドには、イントロまたはタイトルテンプレートを選択します。これは最初のテンプレートの1つである必要があります。
- 他のスライドには、安全でテキストベースのレイアウトを選択します。
- 重要: レイアウト構造を実際のコンテンツに一致させる:
- 単一列レイアウト: 統一されたナレーションまたは単一のトピックに使用します。
- 2列レイアウト: 正確に2つの異なるアイテム/コンセプトがある場合にのみ使用します。
- 3列レイアウト: 正確に3つの異なるアイテム/コンセプトがある場合にのみ使用します。
- 画像+テキストレイアウト: 挿入する実際の画像がある場合にのみ使用します。
- 引用レイアウト: 強調のためではなく、人からの実際の引用(帰属付き)にのみ使用します。
- コンテンツよりも多くのプレースホルダーがあるレイアウトは決して使用しないでください。
- 2つのアイテムがある場合、それらを3列レイアウトに無理やり入れないでください。
- 4つ以上のアイテムがある場合は、複数のスライドに分割するか、リスト形式の使用を検討します。
- レイアウトを選択する前に、実際のコンテンツの数を数えてください。
- 選択したレイアウトの各プレースホルダーが意味のあるコンテンツで埋められることを確認します。
- 各コンテンツセクションに最適なレイアウトを表す1つのオプションを選択します。
- 利用可能なデザインを活用したコンテンツとテンプレートマッピングを含む
outline.mdを保存します。 - テンプレートマッピングの例:
# プレゼンテーション概要 ## スライド1: タイトルスライド - **テンプレート**: スライド0(タイトルレイアウト) - **コンテンツ**: - タイトル: [タイトル] - サブタイトル: [サブタイトル] ## スライド2: コンテンツスライド - **テンプレート**: スライド2(2列レイアウト) - **コンテンツ**: - 左のプレースホルダー: [コンテンツ] - 右のプレースホルダー: [コンテンツ]
-
template-inventory.mdとoutline.mdを確認する: ステップ2と3で作成したファイルを確認し、テンプレートとコンテンツのマッピングが正確で一貫性があることを確認します。 -
テンプレートからプレゼンテーションを構築する:
build-from-template.jsスクリプトを使用して、選択したテンプレートからプレゼンテーションを構築します。node scripts/build-from-template.js template.pptx output.pptx outline.md- このスクリプトは、概要ファイルで指定されたテンプレートスライドを複製し、プレースホルダーを実際のコンテンツで置き換えます。
-
視覚的検証: サムネイルを生成し、レイアウトの問題を検査します。
- サムネイルグリッドを作成:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - サムネイル画像を注意深く読み取り、テキストの途切れ、重なり、配置の問題、コントラストの問題を確認します。
- テンプレートから構築されたコンテンツは、期待されるレイアウトと一致する必要があります。
- 必要に応じて調整します。
- サムネイルグリッドを作成:
サムネイルグリッドの作成
サムネイルグリッドは、プレゼンテーションの内容を素早く視覚的に確認する方法を提供します。scripts/thumbnail.pyスクリプトを使用してサムネイルを生成します。
# デフォルト設定でサムネイルを作成(4列、出力ディレクトリはworkspace/thumbnails)
python scripts/thumbnail.py template.pptx
# カスタム列数と出力ディレクトリを指定
python scripts/thumbnail.py template.pptx workspace/my_thumbnails --cols 6
生成されたサムネイルは、スライドのレイアウト、デザインパターン、視覚的な階層を理解するのに役立ちます。