关于 pptx-manipulation
pptx-manipulation 是借助 python-pptx 创建、编辑和提取 PowerPoint 内容的技能,适合希望自动处理幻灯片的人。它可操作文本、图片、图表和表格等常见元素。
主要功能
- 01创建和编辑 PPTX 文件
- 02添加文本、形状和图片
- 03制作图表和表格
- 04提取演示文稿文本
- 05设置幻灯片内容格式
适用场景
- 01根据大纲生成演示稿
- 02向幻灯片添加数据图表
- 03制作含表格的报告
- 04提取演示文稿中的文本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-office-skills/ skills --skill pptx-manipulation安装后在 Claude Code 中输入/pptx-manipulation确认已加载。
详细介绍
PPTX 操作技能
概述
此技能可借助 python-pptx 库,以编程方式创建、编辑和操作 Microsoft PowerPoint(.pptx)演示文稿。无需手动编辑,即可创建包含文本、形状、图像、图表和表格的专业幻灯片。
使用方法
- 描述你想要创建或修改的演示文稿
- 提供要包含的内容、数据或图像
- 我会生成 python-pptx 代码并执行
提示词示例:
- “根据这份大纲创建一份 10 张幻灯片的路演演示文稿”
- “使用这些数据在第 3 张幻灯片中添加图表”
- “提取这份演示文稿中的所有文本”
- “根据这份 Markdown 内容生成幻灯片”
领域知识
python-pptx 基础知识
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.text import PP_ALIGN
# Create new presentation
prs = Presentation()
# Or open existing
prs = Presentation('existing.pptx')
演示文稿结构
Presentation
├── slide_layouts (predefined layouts)
├── slides (individual slides)
│ ├── shapes (text, images, charts)
│ │ ├── text_frame (paragraphs)
│ │ └── table (rows, cells)
│ └── placeholders (title, content)
└── slide_masters (templates)
幻灯片版式
# Common layout indices (may vary by template)
TITLE_SLIDE = 0
TITLE_CONTENT = 1
SECTION_HEADER = 2
TWO_CONTENT = 3
COMPARISON = 4
TITLE_ONLY = 5
BLANK = 6
# Add slide with layout
slide_layout = prs.slide_layouts[TITLE_CONTENT]
slide = prs.slides.add_slide(slide_layout)
添加内容
标题页
slide_layout = prs.slide_layouts[0] # Title slide
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Quarterly Report"
subtitle.text = "Q4 2024 Performance Review"
文本内容
# Using placeholder
body = slide.placeholders[1]
tf = body.text_frame
tf.text = "First bullet point"
# Add more paragraphs
p = tf.add_paragraph()
p.text = "Second bullet point"
p.level = 0
p = tf.add_paragraph()
p.text = "Sub-bullet"
p.level = 1
文本框
from pptx.util import Inches, Pt
left = Inches(1)
top = Inches(2)
width = Inches(4)
height = Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.paragraphs[0]
p.text = "Custom text box"
p.font.bold = True
p.font.size = Pt(18)
形状
from pptx.enum.shapes import MSO_SHAPE
# Rectangle
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
Inches(1), Inches(2), # left, top
Inches(3), Inches(1.5) # width, height
)
shape.text = "Rectangle with text"
# Common shapes:
# MSO_SHAPE.RECTANGLE, ROUNDED_RECTANGLE
# MSO_SHAPE.OVAL, CHEVRON, ARROW_RIGHT
# MSO_SHAPE.CALLOUT_ROUNDED_RECTANGLE
图像
# Add image
slide.shapes.add_picture(
'image.png',
Inches(1), Inches(2), # position
width=Inches(4) # auto height
)
# Or specify both dimensions
slide.shapes.add_picture(
'logo.png',
Inches(8), Inches(0.5),
Inches(1.5), Inches(0.75)
)
表格
# Create table
rows, cols = 4, 3
left = Inches(1)
top = Inches(2)
width = Inches(8)
height = Inches(2)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
# Set column widths
table.columns[0].width = Inches(2)
table.columns[1].width = Inches(3)
table.columns[2].width = Inches(3)
# Add headers
headers = ['Product', 'Q3 Sales', 'Q4 Sales']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
cell.text_frame.paragraphs[0].font.bold = True
# Add data
data = [
['Widget A', '$10,000', '$12,500'],
['Widget B', '$8,000', '$9,200'],
['Widget C', '$15,000', '$18,000'],
]
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
table.cell(row_idx, col_idx).text = value
图表
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
# Chart data
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('Sales', (19.2, 21.4, 16.7, 23.8))
chart_data.add_series('Expenses', (12.1, 15.3, 14.2, 18.1))
# Add chart
x, y, cx, cy = Inches(1), Inches(2), Inches(8), Inches(4)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
x, y, cx, cy, chart_data
).chart
# Customize
chart.has_legend = True
chart.legend.include_in_layout = False
格式设置
文本格式
from pptx.dml.color import RGBColor
run = p.runs[0]
run.font.name = 'Arial'
run.font.size = Pt(24)
run.font.bold = True
run.font.italic = True
run.font.color.rgb = RGBColor(0x00, 0x66, 0xCC)
形状填充与线条
from pptx.dml.color import RGBColor
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(0x00, 0x80, 0x00)
shape.line.color.rgb = RGBColor(0x00, 0x00, 0x00)
shape.line.width = Pt(2)
段落对齐
from pptx.enum.text import PP_ALIGN
p.alignment = PP_ALIGN.CENTER # LEFT, RIGHT, JUSTIFY
最佳实践
- 使用模板:从 .pptx 模板开始,以保持品牌风格一致
- 先规划版式:编写代码前规划幻灯片结构
- 复用幻灯片母版:确保演示文稿风格一致
- 优化图像:添加图像前先压缩
- 测试输出:务必检查生成的演示文稿
常见模式
幻灯片生成器
def create_deck(title, slides_content):
prs = Presentation()
# Title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = title
# Content slides
for slide_data in slides_content:
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = slide_data['title']
body = slide.placeholders[1]
tf = body.text_frame
for i, point in enumerate(slide_data['points']):
if i == 0:
tf.text = point
else:
p = tf.add_paragraph()
p.text = point
return prs
数据驱动的图表
def add_bar_chart(slide, title, categories, values):
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
chart_data = CategoryChartData()
chart_data.categories = categories
chart_data.add_series('Values', values)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.BAR_CLUSTERED,
Inches(1), Inches(2),
Inches(8), Inches(4),
chart_data
).chart
chart.chart_title.text_frame.text = title
return chart
示例
示例 1:创建路演演示文稿
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
# Slide 1: Title
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "StartupX"
slide.placeholders[1].text = "Revolutionizing Document Processing"
# Slide 2: Problem
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "The Problem"
body = slide.placeholders[1].text_frame
body.text = "Manual document processing costs businesses $1T annually"
p = body.add_paragraph()
p.text = "Average worker spends 20% of time on document tasks"
p.level = 1
# Slide 3: Solution
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "Our Solution"
body = slide.placeholders[1].text_frame
body.text = "AI-powered document automation"
body.add_paragraph().text = "90% faster processing"
body.add_paragraph().text = "99.5% accuracy"
body.add_paragraph().text = "Works with existing tools"
# Slide 4: Market
slide = prs.slides.add_slide(prs.slide_layouts[5]) # Title only
slide.shapes.title.text = "Market Opportunity: $50B by 2028"
# Add chart
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
data = CategoryChartData()
data.categories = ['2024', '2025', '2026', '2027', '2028']
data.add_series('Market Size ($B)', [30, 35, 40, 45, 50])
slide.shapes.add_chart(
XL_CHART_TYPE.LINE,
Inches(1), Inches(1.5),
Inches(8), Inches(5),
data
)
prs.save('pitch_deck.pptx')
示例 2:包含数据表的报告
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
# Title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Sales Performance Report"
slide.placeholders[1].text = "Q4 2024"
# Data slide
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "Regional Performance"
# Create table
table = slide.shapes.add_table(5, 4, Inches(0.5), Inches(1.5), Inches(9), Inches(4)).table
# Headers
headers = ['Region', 'Revenue', 'Growth', 'Target']
for i, h in enumerate(headers):
table.cell(0, i).text = h
table.cell(0, i).text_frame.paragraphs[0].font.bold = True
# Data
data = [
['North America', '$5.2M', '+15%', 'Met'],
['Europe', '$3.8M', '+12%', 'Met'],
['Asia Pacific', '$2.9M', '+28%', 'Exceeded'],
['Latin America', '$1.1M', '+8%', 'Below'],
]
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
table.cell(row_idx, col_idx).text = value
prs.save('sales_report.pptx')
限制
- 无法渲染复杂动画
- 对 SmartArt 的支持有限
- 无法通过 API 嵌入视频
- 幻灯片母版编辑较为复杂
- 图表类型仅限 Office 标准图表
安装
pip install python-pptx
资源
评论
支持 Markdown