據 AlphaMoat 統計,截至 2026-09,Mck Skill Repo 累計下載 1,282 次、獲 1 個星標,在全部 5,078 個 AI 技能中排名第 4,900 位,在「辦公效率」分類(435 個)中排名第 408 位。
| 平台 | 累計安裝 | 累計下載 | 星標 | 評論 |
|---|---|---|---|---|
| ClawHub ↗ | 26 | 1002 | 1 | - |
| SkillHub ↗ | 147 | 1282 | 1 | — |
各平台的計數口徑不同,統計時間不一致。
使用 python‑pptx 從零開始建立符合麥肯錫風格的專業、顧問級 PowerPoint 簡報,適用於使用者要求建立幻燈片時。
2026-09 起統計方法調整:同名技能按作者分別統計,並覆蓋全部技能。圖中虛線為調整前的月份,與之後的資料不直接比較,也不計算跨越調整的增長。
| 月份 | 累計下載 | 環比 | 星標 |
|---|---|---|---|
| 2026-09 | 1282 | — | 1 |
| 2026-08 | 1011 | +12.5% | 1 |
| 2026-07 | 899 | +29.5% | 1 |
| 2026-06 | 694 | +20.1% | 1 |
| 2026-05 | 578 | — | 1 |
| 2026-03 | 336 | — | 1 |
以下是作者釋出的原始檔案,按純文字顯示,本站未做修改或稽核;其中的連結不可點選,命令請核實後再執行。抓取於 2026-10-23。
--- name: mck-ppt-design description: "Create professional, consultant-grade PowerPoint presentations from scratch using python-pptx with McKinsey-style design. Use when user asks to create slides, pitch decks, business presentations, strategy decks, quarterly reviews, board meeting slides, or any professional PPTX. Generates clean, flat-design presentations with 36 layout patterns, consistent typography, and zero file-corruption issues." license: Apache-2.0 version: "1.6.0" author: likaku homepage: https://github.com/likaku/Mck-ppt-design-skill user-invocable: true allowed-tools: - Read
- Write
- Bash
metadata: {"openclaw":{"emoji":"📊","requires":{"bins":["python3","pip"]}}}
---
# McKinsey PPT Design Framework
## Overview
This skill encodes the complete design specification for **professional business presentations** — a consultant-grade PowerPoint framework based on McKinsey design principles. It includes:
- **36 layout patterns** across 7 categories (structure, data, framework, comparison, narrative, timeline, team)
- **Color system** and strict typography hierarchy
- **Python-pptx code patterns** ready to copy and customize
- **Three-layer defense** against file corruption (zero `p:style` leaks)
- **Chinese + English font handling** (KaiTi / Georgia / Arial)
All specifications have been refined through iterative user feedback to ensure visual consistency and professional polish.
---
## When to Use This Skill
Use this skill when users ask to:
1. **Create presentations** — pitch decks, strategy presentations, quarterly reviews, board meeting slides, consulting deliverables, project proposals, business plans
2. **Generate slides programmatically** — using python-pptx to produce .pptx files from scratch
3. **Apply professional design** — McKinsey / BCG / Bain consulting style, clean flat design, no shadows or gradients
4. **Build specific slide types** — cover pages, data dashboards, 2x2 matrices, timelines, funnels, team introductions, executive summaries, comparison layouts
5. **Fix PPT issues** — file corruption ("needs repair"), shadow/3D artifacts, inconsistent fonts, Chinese text rendering problems
6. **Maintain design consistency** — unified color palette, font hierarchy, spacing, and line treatments across all slides
---
## Core Design Philosophy
### McKinsey Design Principles
1. **Extreme Minimalism** - Remove all non-essential visual elements
- No color blocks unless absolutely necessary
- Lines: thin, flat, no shadows or 3D effects
- Shapes: simple, clean, no gradients
- Text: clear hierarchy, maximum readability
2. **Consistency** - Repeat visual language across all slides
- Unified color palette (navy + cyan + grays)
- Consistent font sizes and weights for same content types
- Aligned spacing and margins
- Matching line widths and styles
3. **Hierarchy** - Guide viewer through information
- Title bar (22pt) → Sub-headers (18pt) → Body (14pt) → Details (9pt)
- Navy for primary elements, gray for secondary, black for divisions
- Visual weight through bold, color, size (not through effects)
4. **Flat Design** - No 3D, shadows, or gradients
- Pure solid colors only
- All lines are simple strokes with no effects
- Shapes have no shadow or reflection effects
- Circles are solid fills, not 3D spheres
---
## Design Specifications
### Color Palette
All colors in RGB format for python-pptx:
| Color Name | Hex | RGB | Usage | Notes |
|-----------|-----|-----|-------|-------|
| **NAVY** | #051C2C | (5, 28, 44) | Primary, titles, circles | Corporate, formal tone |
| **CYAN** | #00A9F4 | (0, 169, 244) | Originally used in v1 | **DEPRECATED** - Use NAVY for consistency |
| **WHITE** | #FFFFFF | (255, 255, 255) | Backgrounds, text | On navy backgrounds only |
| **BLACK** | #000000 | (0, 0, 0) | Lines, text separators | For clarity and contrast |
| **DARK_GRAY** | #333333 | (51, 51, 51) | Body text, descriptions | Main content text |
| **MED_GRAY** | #666666 | (102, 102, 102) | Secondary text, labels | Softer tone than DARK_GRAY |
| **LINE_GRAY** | #CCCCCC | (204, 204, 204) | Light separators, table rows | Table separators only |
| **BG_GRAY** | #F2F2F2 | (242, 242, 242) | Background panels | Takeaway/highlight areas |
**Key Rule**: Use navy (#051C2C) everywhere, especially for:
- All circle indicators (A, B, C, 1, 2, 3)
- All action titles
- All primary section headers
- All TOC highlight colors
#### Accent Colors (for multi-item differentiation)
When a slide contains **3 or more parallel items** (e.g., comparison cards, pillar frameworks, multi-category overviews), use these accent colors to create visual distinction between items. Without accent colors, parallel items become visually indistinguishable.
| Accent Name | Hex | RGB | Paired Light BG | Usage |
|-------------|-----|-----|-----------------|-------|
| **ACCENT_BLUE** | #006BA6 | (0, 107, 166) | #E3F2FD | First item accent |
| **ACCENT_GREEN** | #007A53 | (0, 122, 83) | #E8F5E9 | Second item accent |
| **ACCENT_ORANGE** | #D46A00 | (212, 106, 0) | #FFF3E0 | Third item accent |
| **ACCENT_RED** | #C62828 | (198, 40, 40) | #FFEBEE | Fourth item / warning |
**Accent Color Rules**:
- Use accent colors for: **card top accent borders** (thin 0.06" rect), **circle labels** (`add_oval()` bg param), **section sub-headers** (font_color)
- Use paired light BG for: **card background fills** only
- Body text inside cards ALWAYS remains **DARK_GRAY (#333333)**
- NAVY remains the primary color for **single-focus** elements (one card, one stat, cover title)
- Use accent colors **ONLY** when the slide has 3+ parallel items that need visual distinction
- The fourth item (D) can use NAVY instead of ACCENT_RED if red feels inappropriate for the content
```python
# Accent color constants
ACCENT_BLUE = RGBColor(0x00, 0x6B, 0xA6)
ACCENT_GREEN = RGBColor(0x00, 0x7A, 0x53)
ACCENT_ORANGE = RGBColor(0xD4, 0x6A, 0x00)
ACCENT_RED = RGBColor(0xC6, 0x28, 0x28)
LIGHT_BLUE = RGBColor(0xE3, 0xF2, 0xFD)
LIGHT_GREEN = RGBColor(0xE8, 0xF5, 0xE9)
LIGHT_ORANGE = RGBColor(0xFF, 0xF3, 0xE0)
LIGHT_RED = RGBColor(0xFF, 0xEB, 0xEE)
```
---
### Typography System
#### Font Families
```
English Headers: Georgia (serif, elegant)
English Body: Arial (sans-serif, clean)
Chinese (ALL): KaiTi (楷体, traditional brush style)
(fallback: SimSun 宋体)
```
**Critical Implementation**:
```python
def set_ea_font(run, typeface='KaiTi'):
"""Set East Asian font for Chinese text"""
rPr = run._r.get_or_add_rPr()
ea = rPr.find(qn('a:ea'))
if ea is None:
ea = rPr.makeelement(qn('a:ea'), {})
rPr.append(ea)
ea.set('typeface', typeface)
```
Every paragraph with Chinese text MUST apply `set_ea_font()` to all runs.
#### Font Size Hierarchy
| Size | Type | Examples | Notes |
|------|------|----------|-------|
| **44pt** | Cover Title | "项目名称" | Cover slide only, Georgia |
| **28pt** | Section Header | "目录" (TOC title) | Largest body content, Georgia |
| **24pt** | Subtitle | Tagline on cover | Cover slide only |
| **22pt** | Action Title | Slide title bars | Main content titles, **bold**, Georgia |
| **18pt** | Sub-Header | Column headers, section names | Supporting titles |
| **16pt** | Emphasis Text | Bottom takeaway on slide 8 | Callout text, bold |
| **14pt** | Body Text | Tables, lists, descriptions | **PRIMARY BODY SIZE**, all main content |
| **9pt** | Footnote | Source attribution | Smallest, gray color only |
**No other sizes should be used** - stick to this hierarchy exclusively.
---
### Line Treatment (CRITICAL)
#### Line Rendering Rules
1. **All lines are FLAT** - no shadows, no effects, no 3D
2. **Remove theme style references** - prevents automatic shadow application
3. **Solid color only** - no gradients or patterns
4. **Width varies by context** - see table below
#### Line Width Specifications
| Usage | Width | Color | Context |
|-------|-------|-------|---------|
| **Title separator** (under action titles) | 0.5pt | BLACK | Below 22pt title |
| **Column/section divider** (under headers) | 0.5pt | BLACK | Below 18pt headers |
| **Table header line** | 1.0pt | BLACK | Between header and first row |
| **Table row separator** | 0.5pt | LINE_GRAY (#CCCCCC) | Between table rows |
| **Timeline line** (roadmap) | 0.75pt | LINE_GRAY | Background for phase indicators |
| **Cover accent line** | 2.0pt | NAVY | Decorative bottom-left on cover |
| **Column internal divider** | 0.5pt | BLACK | Between "是什么" and "独到之处" |
#### Code Implementation (v1.1 — Rectangle-based Lines)
**CRITICAL**: Do NOT use `slide.shapes.add_connector()` for lines. Connectors carry `<p:style>` elements that reference theme effects and cause file corruption. Instead, draw lines as ultra-thin rectangles:
```python
def add_hline(slide, x, y, length, color=BLACK, thickness=Pt(0.5)):
"""Draw a horizontal line using a thin rectangle (no connector, no p:style)."""
from pptx.util import Emu
h = max(int(thickness), Emu(6350)) # minimum ~0.5pt
return add_rect(slide, x, y, length, h, color)
```
**IMPORTANT**: Never use `add_connector()` — it causes file corruption. Always use `add_hline()` (thin rectangle).
#### Post-Save Full Cleanup (v1.1 — Nuclear Sanitization)
After `prs.save(outpath)`, ALWAYS run full cleanup that sanitizes **both** theme XML **and** all slide XML:
```python
import zipfile, os
from lxml import etree
def full_cleanup(outpath):
"""Remove ALL p:style from every slide + theme shadows/3D."""
tmppath = outpath + '.tmp'
with zipfile.ZipFile(outpath, 'r') as zin:
with zipfile.ZipFile(tmppath, 'w', zipfile.ZIP_DEFLATED) as zout:
for item in zin.infolist():
data = zin.read(item.filename)
if item.filename.endswith('.xml'):
root = etree.fromstring(data)
ns_p = 'http://schemas.openxmlformats.org/presentationml/2006/main'
ns_a = 'http://schemas.openxmlformats.org/drawingml/2006/main'
# Remove ALL p:style elements from all shapes/connectors
for style in root.findall(f'.//{{{ns_p}}}style'):
style.getparent().remove(style)
# Remove shadows and 3D from theme
if 'theme' in item.filename.lower():
for tag in ['outerShdw', 'innerShdw', 'scene3d', 'sp3d']:
for el in root.findall(f'.//{{{ns_a}}}{tag}'):
el.getparent().remove(el)
data = etree.tostring(root, xml_declaration=True,
encoding='UTF-8', standalone=True)
zout.writestr(item, data)
os.replace(tmppath, outpath)
```
---
### Text Box & Shape Treatment
#### Text Box Padding
All text boxes must have consistent internal padding to prevent text touching edges:
```python
bodyPr = tf._txBody.find(qn('a:bodyPr'))
# All margins: 45720 EMUs = ~0.05 inches
for attr in ['lIns','tIns','rIns','bIns']:
bodyPr.set(attr, '45720')
```
#### Vertical Anchoring
Text must be anchored correctly based on usage:
| Content Type | Anchor | Code | Notes |
|--------------|--------|------|-------|
| Action titles | MIDDLE | `anchor='ctr'` | Centered vertically in bar |
| Body text | TOP | `anchor='t'` | Default, aligns to top |
| Labels | CENTER | `anchor='ctr'` | For circle labels |
```python
anchor_map = {
MSO_ANCHOR.MIDDLE: 'ctr',
MSO_ANCHOR.BOTTOM: 'b',
MSO_ANCHOR.TOP: 't'
}
bodyPr.set('anchor', anchor_map.get(anchor, 't'))
```
#### Shape Styling
All shapes (rectangles, circles) must have:
- Solid fill color (no gradients)
- NO border/line (`shape.line.fill.background()`)
- **p:style removed** immediately after creation (`_clean_shape()`)
- No shadow effects (enforced by both inline cleanup and post-save full_cleanup)
```python
def _clean_shape(shape):
"""Remove p:style from any shape to prevent effect references."""
sp = shape._element
style = sp.find(qn('p:style'))
if style is not None:
sp.remove(style)
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
shape.fill.solid()
shape.fill.fore_color.rgb = BG_GRAY
shape.line.fill.background() # CRITICAL: removes border
_clean_shape(shape) # CRITICAL: removes p:style
```
---
## Presentation Planning
This section provides **mandatory guidance** for planning presentation structure, selecting layouts, and ensuring adequate content density. These rules dramatically improve output quality across different LLM models.
### Recommended Slide Structures
When creating a presentation, follow these templates unless the user explicitly specifies a different structure:
#### Standard Presentation (10-12 slides)
```
Slide 1: Cover Slide (Pattern #1 or #4)
Slide 2: Table of Contents (Pattern #6) — list ALL content sections
Slide 3: Executive Summary / Core Thesis (Pattern #24 or #8+#10)
Slides 4-7: Supporting Arguments (one per slide, vary layouts)
Slides 8-10: Case Studies / Evidence (Pattern #33 or #19)
Slide 11: Synthesis / Roadmap (Pattern #29 or #16)
Slide 12: Key Takeaways + Closing (Pattern #34 or #36)
```
#### Short Presentation (6-8 slides)
```
Slide 1: Cover Slide
Slide 2: Executive Summary (Pattern #24)
Slides 3-5: Core Content (vary layouts: #8, #14, #19, #33)
Slide 6: Synthesis / Timeline (Pattern #29)
Slide 7: Key Takeaways (Pattern #34)
Slide 8: Closing (Pattern #36)
```
**CRITICAL RULES**:
- **Minimum slide count**: 8 slides for any substantive topic. If the user's content supports 10+, generate 10+.
- **Never stop early**: Generate ALL planned slides in a single script. Do not truncate.
- **TOC must list ALL sections**: The Table of Contents slide must enumerate every content slide by number and title.
### Layout Diversity Requirement
**Each content slide MUST use a DIFFERENT layout pattern from its neighbors.** Repeating the same layout on consecutive slides makes the presentation feel monotonous and unprofessional.
Match content type to the optimal layout pattern:
| Content Type | Recommended Layouts | Avoid |
|---|---|---|
| Single key statistic | Big Number (#8) | Plain text |
| 2 options comparison | Side-by-Side (#19), Before/After (#20) | Two-column text |
| 3-4 parallel concepts | Three-Pillar (#14), Four-Column (#27), Metric Cards (#10) | Bullet list |
| Process / steps | Process Chevron (#16), Vertical Steps (#30) | Numbered text |
| Timeline | Timeline/Roadmap (#29), Cycle (#31) | Bullet list |
| Data table | Data Table (#9), Scorecard (#22) | Plain text |
| Case study | Case Study (#33): Situation → Approach → Result | Two-column text |
| Summary / conclusion | Executive Summary (#24), Key Takeaway (#25) | Bullet list |
| Multiple KPIs | Three-Stat Dashboard (#12), Two-Stat Comparison (#11) | Plain text |
**NEVER** use Two-Column Text (#26) for more than 1 slide per deck. It is the least visually engaging layout.
### Content Density Requirements
"Minimalism" in McKinsey design means **removing decorative noise** (shadows, gradients, clip-art), NOT removing content. A slide with 80% whitespace is not minimalist — it is EMPTY.
**Mandatory minimums per content slide**:
1. **At least 3 distinct visual blocks** — e.g., title bar + content area + takeaway box, or title + left panel + right panel
2. **Body text area utilization ≥ 50%** of the available content space (between title bar at 1.4" and source line at 7.05")
3. **Action Title must be a FULL SENTENCE** expressing the slide's key insight:
- ✅ `"连接组约束的AI模型将自由参数减少90%,实现单细胞精度预测"`
- ❌ `"连接组约束的AI模型"`
4. **Use specific data points** when the user provides them (numbers, percentages, names) — display them prominently with Big Number or Metric Card patterns
5. **Source attribution** (`add_source()`) on every content slide with specific references, not generic labels
### Mandatory Slide Elements
EVERY content slide (except Cover and Closing) MUST include ALL of these:
| Element | Function | Position |
|---------|----------|----------|
| Action Title | `add_action_title(slide, text)` | Top (0.15" from top) |
| Title separator line | Included in `add_action_title()` | 1.05" from top |
| Content area | Layout-specific content blocks | 1.4" to 6.5" |
| Source attribution | `add_source(slide, text)` | 7.05" from top |
| Page number | `add_page_number(slide, n, total)` | Bottom-right corner |
Page number helper function:
```python
def add_page_number(slide, num, total):
add_text(slide, Inches(12.2), Inches(7.1), Inches(1), Inches(0.3),
f"{num}/{total}", font_size=Pt(9), font_color=MED_GRAY,
alignment=PP_ALIGN.RIGHT)
```
---
## Layout Patterns
### Slide Dimensions
```python
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
```
Widescreen format (16:9), standard for all presentations.
### Standard Margin/Padding
| Position | Size | Usage |
|----------|------|-------|
| **Left margin** | 0.8" | Default left edge |
| **Right margin** | 0.8" | Default right edge |
| **Top (below title)** | 1.4" | Content start position |
| **Bottom** | 7.05" | Source text baseline |
| **Title bar height** | 0.9" | Action title bar |
| **Title bar top** | 0.15" | From slide top |
### Slide Type Patterns
#### 1. Cover Slide (Slide 1)
Layout:
- Navy bar at very top (0.05" height)
- Main title centered (44pt, Georgia, navy) at y=2.2"
- Subtitle (24pt, dark gray) at y=3.5"
- Date/info (14pt, med gray) at y=4.5"
- Decorative navy line at x=1", y=6.8" (2" wide, 2pt)
Code template:
```python
s1 = prs.slides.add_slide(prs.slide_layouts[6])
add_rect(s1, 0, 0, prs.slide_width, Inches(0.05), NAVY)
add_text(s1, Inches(1), Inches(2.2), Inches(11), Inches(1.0),
'项目名称', font_size=Pt(44), font_name='Georgia',
font_color=NAVY, bold=True, ea_font='KaiTi')
add_text(s1, Inches(1), Inches(3.5), Inches(11), Inches(0.6),
'副标题描述', font_size=Pt(24),
font_color=DARK_GRAY, ea_font='KaiTi')
add_text(s1, Inches(1), Inches(4.5), Inches(11), Inches(0.5),
'演示文稿 | 2026年3月', font_size=BODY_SIZE,
font_color=MED_GRAY, ea_font='KaiTi')
add_line(s1, Inches(1), Inches(6.8), Inches(4), Inches(6.8),
color=NAVY, width=Pt(2))
```
#### 2. Action Title Slide (Most Content Slides)
Every main content slide has this structure:
```
┌─────────────────────────────────────────┐ 0.15"
│ ▌ Action Title (22pt, bold, black) │ ← TITLE_BAR_H = 0.9"
├─────────────────────────────────────────┤ 1.05"
│ │
│ Content area (starts at 1.4") │
│ [Tables, lists, text, etc.] │
│ │
│ │
│ ────────────────────────────────────── │ 7.05"
│ Source: ... │ 9pt, med gray
└─────────────────────────────────────────┘ 7.5"
```
Code pattern:
```python
s = prs.slides.add_slide(prs.slide_layouts[6])
add_action_title(s, 'Slide Title Here')
# Then add content below y=1.4"
add_source(s, 'Source attribution')
```
#### 3. Table Layout (Slide 4 - Five Capabilities)
Structure:
- Header row with column names (BODY_SIZE, gray, bold)
- 1.0pt black line under header
- Data rows (1.0" height each, 14pt text)
- 0.5pt gray line between rows
- 3 columns: Module (1.6" wide), Function (5.0"), Scene (5.1")
```python
# Headers
add_text(s4, left, top, width, height, text,
font_size=BODY_SIZE, font_color=MED_GRAY, bold=True)
# Header line (thicker)
add_line(s4, left, top + Inches(0.5), left + full_width, top + Inches(0.5),
color=BLACK, width=Pt(1.0))
# Rows
for i, (col1, col2, col3) in enumerate(rows):
y = header_y + row_height * i
add_text(s4, left, y, col1_w, row_h, col1, ...)
add_text(s4, left + col1_w, y, col2_w, row_h, col2, ...)
add_text(s4, left + col1_w + col2_w, y, col3_w, row_h, col3, ...)
# Row separator
add_line(s4, left, y + row_h, left + full_w, y + row_h,
color=LINE_GRAY, width=Pt(0.5))
```
#### 4. Three-Column Overview (Slide 5)
Layout:
- Left column (4.1" wide): "是什么"
- Middle column (4.1" wide): "独到之处"
- Right 1/4 (2.5" wide) gray panel: "Key Takeaways"
```
0.8" 4.9" 5.3" 9.4" 10.0" 12.5"
|-----|-----|-----|-----|------|
│左 │ │ 中 │ │ 右 │
└─────────────────────────────┘
```
Code:
```python
left_x = Inches(0.8)
col_w5 = Inches(4.1)
mid_x = Inches(5.3)
takeaway_left = Inches(10.0)
takeaway_width = Inches(2.5)
# Left column
add_text(s5, left_x, content_top, col_w5, ...)
add_text(s5, left_x, content_top + Inches(0.6), col_w5, ...,
bullet=True, line_spacing=Pt(8))
# Right gray takeaway area
add_rect(s5, takeaway_left, Inches(1.2), takeaway_width, Inches(5.6), BG_GRAY)
add_text(s5, takeaway_left + Inches(0.15), Inches(1.35), takeaway_width - Inches(0.3), ...,
'Key Takeaways', font_size=BODY_SIZE, color=NAVY, bold=True)
add_text(s5, takeaway_left + Inches(0.15), Inches(1.9), takeaway_width - Inches(0.3), ...,
[f'{i+1}. {t}' for i, t in enumerate(takeaways)], line_spacing=Pt(10))
```
---
### 类别 A:结构导航
#### 5. Section Divider (章节分隔页)
**适用场景**: 多章节演示文稿的章节过渡页,用于视觉上分隔不同主题模块。
```
┌──┬──────────────────────────────────────┐
│N │ │
│A │ 第一部分 │
│V │ 章节标题(28pt, NAVY, bold) │
│Y │ 副标题说明文字 │
│ │ │
└──┴──────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_rect(s, 0, 0, Inches(0.6), SH, NAVY)
add_text(s, Inches(1.2), Inches(2.0), Inches(10), Inches(0.8),
'第一部分', font_size=SUB_HEADER_SIZE, font_color=MED_GRAY, font_name='Georgia')
add_text(s, Inches(1.2), Inches(2.8), Inches(10), Inches(1.2),
'章节标题', font_size=HEADER_SIZE, font_color=NAVY, bold=True, font_name='Georgia')
add_text(s, Inches(1.2), Inches(4.2), Inches(10), Inches(0.6),
'副标题说明文字', font_size=BODY_SIZE, font_color=DARK_GRAY)
```
#### 6. Table of Contents / Agenda (目录/议程页)
**适用场景**: 演示文稿开头的目录或会议议程,列出各章节及说明。
```
┌─────────────────────────────────────────┐
│ ▌ 目录 │
├─────────────────────────────────────────┤
│ │
│ (1) 章节一标题 简要描述 │
│ ───────────────────────────────────── │
│ (2) 章节二标题 简要描述 │
│ ───────────────────────────────────── │
│ (3) 章节三标题 简要描述 │
│ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '目录')
items = [('1', '引言与背景', '项目起源与核心问题'),
('2', '市场分析', '竞争格局与机会识别'),
('3', '战略建议', '三大核心行动方案')]
iy = Inches(1.6)
for num, title, desc in items:
add_oval(s, LM, iy, num, size=Inches(0.5))
add_text(s, LM + Inches(0.7), iy, Inches(4.0), Inches(0.4),
title, font_size=SUB_HEADER_SIZE, font_color=NAVY, bold=True)
add_text(s, Inches(5.5), iy + Inches(0.05), Inches(6.5), Inches(0.4),
desc, font_size=BODY_SIZE, font_color=MED_GRAY)
iy += Inches(0.7)
add_hline(s, LM, iy, CONTENT_W, LINE_GRAY)
iy += Inches(0.3)
```
#### 7. Appendix Title (附录标题页)
**适用场景**: 正文结束后的附录/备用材料分隔页。
```
┌─────────────────────────────────────────┐
│ │
│ │
│ 附录 │
│ Appendix │
│ ──────── │
│ 补充数据与参考资料 │
│ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_rect(s, 0, 0, SW, Inches(0.05), NAVY)
add_text(s, Inches(1), Inches(2.5), Inches(11.3), Inches(1.0),
'附录', font_size=Pt(36), font_color=NAVY, bold=True,
font_name='Georgia', alignment=PP_ALIGN.CENTER)
add_hline(s, Inches(5.5), Inches(3.8), Inches(2.3), NAVY, Pt(1.5))
add_text(s, Inches(1), Inches(4.2), Inches(11.3), Inches(0.5),
'补充数据与参考资料', font_size=BODY_SIZE, font_color=MED_GRAY,
alignment=PP_ALIGN.CENTER)
```
---
### 类别 B:数据统计
#### 8. Big Number / Factoid (大数据展示页)
**适用场景**: 用一个醒目的大数字引出核心发现或关键数据点。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ │
│ ┌─NAVY─────────┐ │
│ │ 95% │ 右侧上下文说明 │
│ │ 子标题 │ 详细解释数据含义 │
│ └──────────────┘ │
│ │
│ ┌─BG_GRAY──────────────────────────┐ │
│ │ 关键洞见:详细分析文字 │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '关键发现标题')
add_rect(s, LM, Inches(1.4), Inches(3.5), Inches(1.8), NAVY)
add_text(s, LM + Inches(0.2), Inches(1.5), Inches(3.1), Inches(0.8),
'95%', font_size=Pt(44), font_color=WHITE, bold=True,
font_name='Georgia', alignment=PP_ALIGN.CENTER)
add_text(s, LM + Inches(0.2), Inches(2.3), Inches(3.1), Inches(0.7),
'描述数据含义', font_size=Pt(12), font_color=WHITE, alignment=PP_ALIGN.CENTER)
add_text(s, Inches(5.0), Inches(1.5), Inches(7.5), Inches(2.0),
'上下文说明与详细解释', font_size=BODY_SIZE)
add_rect(s, LM, Inches(4.5), CONTENT_W, Inches(2.2), BG_GRAY)
add_text(s, LM + Inches(0.3), Inches(4.6), Inches(1.5), Inches(0.4),
'关键洞见', font_size=BODY_SIZE, font_color=NAVY, bold=True)
add_text(s, LM + Inches(0.3), Inches(5.1), CONTENT_W - Inches(0.6), Inches(1.4),
['洞见要点一', '洞见要点二', '洞见要点三'], line_spacing=Pt(8))
add_source(s, 'Source: ...')
```
#### 9. Two-Stat Comparison (双数据对比页)
**适用场景**: 并排展示两个关键指标的对比(如同比、环比、A vs B)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ │
│ ┌──NAVY───────┐ ┌──BG_GRAY────┐ │
│ │ $2.4B │ │ $1.8B │ │
│ │ 2026年目标 │ │ 2025年实际 │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ 分析说明文字 │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '对比标题')
stats = [('$2.4B', '2026年目标', True), ('$1.8B', '2025年实际', False)]
sw = Inches(5.5)
sg = Inches(0.733)
for i, (big, small, is_navy) in enumerate(stats):
sx = LM + (sw + sg) * i
fill = NAVY if is_navy else BG_GRAY
bc = WHITE if is_navy else NAVY
sc = WHITE if is_navy else DARK_GRAY
add_rect(s, sx, Inches(1.8), sw, Inches(2.5), fill)
add_text(s, sx + Inches(0.3), Inches(2.0), sw - Inches(0.6), Inches(1.0),
big, font_size=Pt(44), font_color=bc, bold=True,
font_name='Georgia', alignment=PP_ALIGN.CENTER)
add_text(s, sx + Inches(0.3), Inches(3.2), sw - Inches(0.6), Inches(0.5),
small, font_size=BODY_SIZE, font_color=sc, alignment=PP_ALIGN.CENTER)
add_text(s, LM, Inches(5.0), CONTENT_W, Inches(1.5),
'分析说明文字', font_size=BODY_SIZE)
add_source(s, 'Source: ...')
```
#### 10. Three-Stat Dashboard (三指标仪表盘)
**适用场景**: 同时展示三个关键业务指标(如 KPI、季度数据)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌──NAVY──┐ ┌──BG_GRAY─┐ ┌──BG_GRAY─┐│
│ │ 数字1 │ │ 数字2 │ │ 数字3 ││
│ │ 小标题 │ │ 小标题 │ │ 小标题 ││
│ └────────┘ └─────────┘ └─────────┘│
│ │
│ 详细说明文字 │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '三大关键指标')
stats = [('87%', '客户满意度', True),
('+23%', '同比增长', False),
('4.2x', '投资回报率', False)]
sw = Inches(3.5)
sg = (CONTENT_W - sw * 3) / 2
for i, (big, small, is_navy) in enumerate(stats):
sx = LM + (sw + sg) * i
fill = NAVY if is_navy else BG_GRAY
bc = WHITE if is_navy else NAVY
sc = WHITE if is_navy else DARK_GRAY
add_rect(s, sx, Inches(1.4), sw, Inches(1.8), fill)
add_text(s, sx + Inches(0.2), Inches(1.5), sw - Inches(0.4), Inches(0.7),
big, font_size=Pt(28), font_color=bc, bold=True,
font_name='Georgia', alignment=PP_ALIGN.CENTER)
add_text(s, sx + Inches(0.2), Inches(2.25), sw - Inches(0.4), Inches(0.6),
small, font_size=Pt(12), font_color=sc, alignment=PP_ALIGN.CENTER)
add_source(s, 'Source: ...')
```
#### 11. Data Table with Headers (数据表格页)
**适用场景**: 结构化数据展示,如财务数据、功能对比矩阵、项目清单。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ 列1 列2 列3 列4 │
│ ═══════════════════════════════════ │
│ 数据1-1 数据1-2 ... ... │
│ ─────────────────────────────────── │
│ 数据2-1 数据2-2 ... ... │
│ ─────────────────────────────────── │
│ 数据3-1 数据3-2 ... ... │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '数据概览')
headers = ['模块', '功能', '状态', '负责人']
col_widths = [Inches(2.5), Inches(4.0), Inches(2.5), Inches(2.7)]
hdr_y = Inches(1.5)
cx = LM
for hdr, cw in zip(headers, col_widths):
add_text(s, cx, hdr_y, cw, Inches(0.4), hdr,
font_size=BODY_SIZE, font_color=MED_GRAY, bold=True)
cx += cw
add_hline(s, LM, Inches(2.0), CONTENT_W, BLACK, Pt(1.0))
# Data rows
rows = [['模块A', '核心功能描述', '已上线', '张三'], ...]
row_h = Inches(0.8)
for ri, row in enumerate(rows):
ry = Inches(2.1) + row_h * ri
cx = LM
for val, cw in zip(row, col_widths):
add_text(s, cx, ry, cw, row_h, val, font_size=BODY_SIZE)
cx += cw
add_hline(s, LM, ry + row_h, CONTENT_W, LINE_GRAY)
add_source(s, 'Source: ...')
```
#### 12. Metric Cards Row (指标卡片行)
**适用场景**: 3-4个并排卡片展示独立指标,每个卡片含标题+描述。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌─BG_GRAY─┐ ┌─BG_GRAY─┐ ┌─BG_GRAY─┐ │
│ │ (A) │ │ (B) │ │ (C) │ │
│ │ 标题 │ │ 标题 │ │ 标题 │ │
│ │ ─── │ │ ─── │ │ ─── │ │
│ │ 描述 │ │ 描述 │ │ 描述 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '核心指标概览')
cards = [('A', '用户增长', '月活用户达到 120 万\n同比增长 35%'),
('B', '营收表现', '季度营收 ¥8,500 万\n超出预期 12%'),
('C', '运营效率', '客诉响应时间 < 2h\n满意度 94%')]
cw = Inches(3.5)
cg = (CONTENT_W - cw * 3) / 2
for i, (letter, title, desc) in enumerate(cards):
cx = LM + (cw + cg) * i
cy = Inches(1.5)
add_rect(s, cx, cy, cw, Inches(4.5), BG_GRAY)
add_oval(s, cx + Inches(1.5), cy + Inches(0.2), letter)
add_text(s, cx + Inches(0.2), cy + Inches(0.8), cw - Inches(0.4), Inches(0.4),
title, font_size=SUB_HEADER_SIZE, font_color=NAVY, bold=True,
alignment=PP_ALIGN.CENTER)
add_hline(s, cx + Inches(0.4), cy + Inches(1.3), cw - Inches(0.8), LINE_GRAY)
add_text(s, cx + Inches(0.2), cy + Inches(1.5), cw - Inches(0.4), Inches(2.5),
desc.split('\n'), line_spacing=Pt(8), alignment=PP_ALIGN.CENTER)
add_source(s, 'Source: ...')
```
---
### 类别 C:框架矩阵
#### 13. 2x2 Matrix (四象限矩阵)
**适用场景**: 战略分析(如 BCG 矩阵、优先级排序、风险评估)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ 高 Y轴 │
│ ┌─NAVY──────┐ ┌─BG_GRAY───┐ │
│ │ 左上象限 │ │ 右上象限 │ │
│ └───────────┘ └───────────┘ │
│ ┌─BG_GRAY───┐ ┌─BG_GRAY───┐ │
│ │ 左下象限 │ │ 右下象限 │ │
│ └───────────┘ └───────────┘ │
│ 低 高 X轴 │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '战略优先级矩阵')
mx = LM + Inches(1.5)
my = Inches(1.8)
cw = Inches(4.5)
ch = Inches(2.5)
# Axis labels
add_text(s, mx - Inches(1.3), my + Inches(0.8), Inches(1.1), Inches(0.4),
'高影响', font_size=BODY_SIZE, font_color=NAVY, bold=True, alignment=PP_ALIGN.CENTER)
add_text(s, mx + Inches(0.8), my - Inches(0.5), Inches(3.0), Inches(0.4),
'高可行性', font_size=BODY_SIZE, font_color=NAVY, bold=True, alignment=PP_ALIGN.CENTER)
# Quadrants
add_rect(s, mx, my, cw, ch, NAVY) # best quadrant
add_rect(s, mx + cw + Inches(0.15), my, cw, ch, BG_GRAY)
add_rect(s, mx, my + ch + Inches(0.15), cw, ch, BG_GRAY)
add_rect(s, mx + cw + Inches(0.15), my + ch + Inches(0.15), cw, ch, BG_GRAY)
# Quadrant titles + descriptions
add_text(s, mx + Inches(0.3), my + Inches(0.3), cw - Inches(0.6), Inches(0.5),
'立即执行', font_size=SUB_HEADER_SIZE, font_color=WHITE, bold=True)
# ... repeat for other 3 quadrants with DARK_GRAY text
add_source(s, 'Source: ...')
```
#### 14. Three-Pillar Framework (三支柱框架)
**适用场景**: 展示三个并列的核心策略、能力或主题模块。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌──NAVY──┐ ┌──NAVY──┐ ┌──NAVY──┐ │
│ │ 标题1 │ │ 标题2 │ │ 标题3 │ │
│ ├────────┤ ├────────┤ ├────────┤ │
│ │ 要点 │ │ 要点 │ │ 要点 │ │
│ │ 要点 │ │ 要点 │ │ 要点 │ │
│ │ 要点 │ │ 要点 │ │ 要点 │ │
│ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '三大核心战略')
pillars = [('数字化转型', ['建设数据中台', '打通全渠道', '自动化运营']),
('组织升级', ['扁平化管理', '敏捷团队', '人才梯队']),
('客户深耕', ['精细化运营', '会员体系', 'LTV 提升'])]
pw = Inches(3.5)
pg = (CONTENT_W - pw * 3) / 2
for i, (title, points) in enumerate(pillars):
px = LM + (pw + pg) * i
add_rect(s, px, Inches(1.5), pw, Inches(0.6), NAVY)
add_text(s, px + Inches(0.15), Inches(1.5), pw - Inches(0.3), Inches(0.6),
title, font_size=SUB_HEADER_SIZE, font_color=WHITE, bold=True,
anchor=MSO_ANCHOR.MIDDLE, alignment=PP_ALIGN.CENTER)
add_rect(s, px, Inches(2.1), pw, Inches(4.0), BG_GRAY)
add_text(s, px + Inches(0.2), Inches(2.3), pw - Inches(0.4), Inches(3.5),
[f'• {p}' for p in points], line_spacing=Pt(10))
add_source(s, 'Source: ...')
```
#### 15. Pyramid / Hierarchy (金字塔/层级图)
**适用场景**: 展示层级关系(如 Maslow 需求层次、战略-战术-执行分层)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌──NAVY──┐ │
│ │ 愿景 │ 右侧说明 │
│ ┌─┴────────┴─┐ │
│ │ 战略目标 │ 右侧说明 │
│ ┌─┴────────────┴─┐ │
│ │ 执行措施 │ 右侧说明 │
│ └────────────────┘ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '战略层级框架')
levels = [('愿景', '成为行业第一', Inches(3.5)),
('战略目标', '三年收入翻倍', Inches(5.0)),
('执行措施', '渠道+产品+组织', Inches(6.5))]
for i, (label, desc, w) in enumerate(levels):
lx = Inches(6.666) - w / 2 # centered
ly = Inches(1.8) + Inches(1.5) * i
h = Inches(1.2)
fill = NAVY if i == 0 else BG_GRAY
tc = WHITE if i == 0 else NAVY
add_rect(s, lx, ly, w, h, fill)
add_text(s, lx + Inches(0.2), ly + Inches(0.1), w - Inches(0.4), Inches(0.4),
label, font_size=SUB_HEADER_SIZE, font_color=tc, bold=True,
alignment=PP_ALIGN.CENTER)
add_text(s, lx + Inches(0.2), ly + Inches(0.55), w - Inches(0.4), Inches(0.5),
desc, font_size=BODY_SIZE, font_color=tc if i == 0 else DARK_GRAY,
alignment=PP_ALIGN.CENTER)
add_source(s, 'Source: ...')
```
#### 16. Process Chevron (流程箭头页)
**适用场景**: 线性流程展示(3-5步),如实施路径、业务流程、方法论步骤。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ │
│ ┌NAVY┐ -> ┌GRAY┐ -> ┌GRAY┐ -> ┌GRAY┐ │
│ │ S1 │ │ S2 │ │ S3 │ │ S4 │ │
│ └────┘ └────┘ └────┘ └────┘ │
│ 描述 描述 描述 描述 │
│ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '实施路径')
steps = [('诊断', '现状评估\n痛点识别'),
('设计', '方案制定\n资源规划'),
('实施', '分阶段落地\n快速迭代'),
('优化', '效果追踪\n持续改进')]
sw = Inches(2.5)
sg = (CONTENT_W - sw * len(steps)) / (len(steps) - 1)
for i, (title, desc) in enumerate(steps):
sx = LM + (sw + sg) * i
fill = NAVY if i == 0 else BG_GRAY
tc = WHITE if i == 0 else NAVY
add_rect(s, sx, Inches(2.0), sw, Inches(1.2), fill)
add_oval(s, sx + Inches(0.1), Inches(2.1), str(i + 1),
bg=WHITE if i == 0 else NAVY, fg=NAVY if i == 0 else WHITE)
add_text(s, sx + Inches(0.6), Inches(2.1), sw - Inches(0.8), Inches(1.0),
title, font_size=SUB_HEADER_SIZE, font_color=tc, bold=True,
anchor=MSO_ANCHOR.MIDDLE)
add_text(s, sx + Inches(0.1), Inches(3.4), sw - Inches(0.2), Inches(1.5),
desc, font_size=BODY_SIZE, alignment=PP_ALIGN.CENTER)
if i < len(steps) - 1:
add_text(s, sx + sw + Inches(0.05), Inches(2.3), Inches(0.4), Inches(0.5),
'->', font_size=SUB_HEADER_SIZE, font_color=NAVY, bold=True)
add_source(s, 'Source: ...')
```
#### 17. Venn Diagram Concept (维恩图概念页)
**适用场景**: 展示两三个概念的交集关系(如能力交叉、市场定位)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌──BG──┐ │
│ ╱概念A ╲ │
│ ╱ ┌──┐ ╲ 右侧说明 │
│ │ │交│ │ │
│ ╲ └──┘ ╱ │
│ ╲概念B ╱ │
│ └──────┘ │
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '核心能力交叉')
# Use overlapping rectangles to represent Venn concept
add_rect(s, Inches(1.5), Inches(1.8), Inches(4.5), Inches(4.0), BG_GRAY)
add_text(s, Inches(1.7), Inches(2.0), Inches(2.0), Inches(0.4),
'技术能力', font_size=SUB_HEADER_SIZE, font_color=NAVY, bold=True)
add_rect(s, Inches(3.5), Inches(2.8), Inches(4.5), Inches(4.0), BG_GRAY)
add_text(s, Inches(5.5), Inches(5.5), Inches(2.0), Inches(0.4),
'业务洞察', font_size=SUB_HEADER_SIZE, font_color=NAVY, bold=True)
# Intersection area
add_rect(s, Inches(3.5), Inches(2.8), Inches(2.5), Inches(3.0), NAVY)
add_text(s, Inches(3.7), Inches(3.5), Inches(2.1), Inches(0.8),
'核心\n竞争力', font_size=SUB_HEADER_SIZE, font_color=WHITE, bold=True,
alignment=PP_ALIGN.CENTER)
# Right explanation
add_text(s, Inches(9.0), Inches(2.0), Inches(3.5), Inches(4.0),
'当技术能力与业务洞察交叉时...', font_size=BODY_SIZE)
add_source(s, 'Source: ...')
```
#### 18. Temple / House Framework (殿堂框架)
**适用场景**: 展示"屋顶-支柱-基座"的结构(如企业架构、能力体系)。
```
┌─────────────────────────────────────────┐
│ ▌ Action Title │
├─────────────────────────────────────────┤
│ ┌═══════════NAVY(愿景/屋顶)══════════┐│
│ ├────┤ ├────┤ ├────┤ ├────┤ ││
│ │支柱│ │支柱│ │支柱│ │支柱│ ││
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ ││
│ ├════╧══╧════╧══╧════╧══╧════╧════════┤│
│ │ 基座(基础能力/文化) ││
│ └──────────────────────────────────────┘│
└─────────────────────────────────────────┘
```
```python
s = prs.slides.add_slide(BL)
add_action_title(s, '企业能力架构')
# Roof
add_rect(s, LM, Inches(1.5), CONTENT_W, Inches(0.8), NAVY)
add_text(s, LM + Inches(0.3), Inches(1.5), CONTENT_W - Inches(0.6), Inches(0.8),
'企业愿景:成为行业领先的数字化平台',
font_size=SUB_HEADER_SIZE, font_color=WHITE, bold=True,
an原文較長,這裡只顯示前 48 KB,完整內容請到來源頁面檢視。
透過 MCP 在騰訊文件裡新建、編輯與管理線上文件的完整操作手冊。
在保留公式、格式和活頁簿結構的前提下建立、檢查或編輯 Excel 檔案。
處理 Word 與 DOCX 文件的作業指南,著重維持樣式、編號與版面。
透過命令列存取 Gmail、日曆、Drive、Contacts、Sheets 與 Docs。
PDF和圖片文字提取 將文件文字、表格與掃描頁識別整理為文字結果。
按主題與風格自動生成 PPT 檔案的技能。
透過 kdocs-cli 操作金山文件雲文件的官方技能。
用自然語言指令改 PDF 指定頁的小工具。
資料月份:2026-09 · 下載/星標/安裝數聚合自公開技能註冊庫(ClawHub、SkillHub),按月更新。口徑說明見資料方法。