pptx
PowerPoint presentation toolkit for creating new presentations, editing existing ones, and using templates. Supports HTML-to-PPTX conversion, slide manipulation, and professional design. Use when building presentations, slide decks, or visual reports.
When & Why to Use This Skill
This Claude skill is a comprehensive PowerPoint presentation toolkit designed to automate the creation, editing, and styling of PPTX files. It enables users to generate professional slide decks from scratch, convert HTML content to presentations, and manipulate existing files programmatically. By supporting advanced features like dynamic chart generation, table insertion, and template-based workflows, it streamlines the production of visual reports and business presentations, significantly reducing manual design effort and ensuring brand consistency.
Use Cases
- Automated Business Reporting: Generating recurring performance slide decks by pulling data directly into formatted PowerPoint templates.
- Data-Driven Pitch Decks: Creating structured sales or investment presentations that automatically incorporate complex charts and tables from analytical datasets.
- Content Transformation: Converting HTML-based documentation or web content into professional slide layouts for meetings and offline distribution.
- Batch Presentation Updates: Programmatically modifying logos, themes, or specific text across a large volume of existing presentation files to maintain corporate branding.
- Dynamic Visual Reports: Building customized visual reports that include high-quality images and styled text boxes for executive summaries.
| name | pptx |
|---|---|
| description | PowerPoint presentation toolkit for creating new presentations, editing existing ones, and using templates. Supports HTML-to-PPTX conversion, slide manipulation, and professional design. Use when building presentations, slide decks, or visual reports. |
| version | 1.1.0 |
| last_updated | 2026-01-02 |
| category | document-handling |
PPTX Processing Skill
Overview
This skill provides three primary workflows for PowerPoint manipulation: creating from scratch, editing existing presentations, and using templates.
Quick Start
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
# Add title slide
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
title_slide.shapes.title.text = "My Presentation"
title_slide.placeholders[1].text = "By Claude"
prs.save("presentation.pptx")
When to Use
- Creating automated presentation reports
- Building slide decks from data
- Generating pitch presentations
- Converting HTML content to slides
- Adding charts and tables to presentations
- Batch processing multiple presentations
- Updating existing presentations programmatically
- Creating consistent branded presentations from templates
Creating New Presentations
Basic Creation with python-pptx
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
prs = Presentation()
# Add title slide
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Presentation Title"
subtitle.text = "Subtitle or Author"
# Add content slide
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
shapes = slide.shapes
title_shape = shapes.title
body_shape = shapes.placeholders[1]
title_shape.text = "Slide Title"
tf = body_shape.text_frame
tf.text = "First bullet point"
p = tf.add_paragraph()
p.text = "Second bullet point"
p.level = 0
p = tf.add_paragraph()
p.text = "Sub-bullet"
p.level = 1
prs.save("presentation.pptx")
Add Images
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
left = Inches(1)
top = Inches(1)
width = Inches(5)
slide.shapes.add_picture("image.png", left, top, width=width)
prs.save("with_image.pptx")
Add Charts
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('Sales', (19.2, 21.4, 16.7, 28.0))
chart_data.add_series('Expenses', (14.2, 18.3, 15.4, 20.1))
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)
prs.save("with_chart.pptx")
Add Tables
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])
rows, cols = 3, 4
left = Inches(1)
top = Inches(2)
width = Inches(6)
height = Inches(2)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
# Set column widths
for col_idx in range(cols):
table.columns[col_idx].width = Inches(1.5)
# Fill cells
for row_idx, row in enumerate(table.rows):
for col_idx, cell in enumerate(row.cells):
cell.text = f"R{row_idx+1}C{col_idx+1}"
prs.save("with_table.pptx")
Design Principles
Before Writing Code
State your content-informed design approach:
- What is the purpose and tone?
- Select colors that genuinely match the topic
- Plan visual hierarchy and layout
- Consider typography choices
Professional Styling
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])
# Add styled text box
left = Inches(1)
top = Inches(1)
width = Inches(8)
height = Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.paragraphs[0]
p.text = "Styled Heading"
p.font.size = Pt(44)
p.font.bold = True
p.font.color.rgb = RGBColor(0x2E, 0x74, 0xB5)
p.alignment = PP_ALIGN.CENTER
prs.save("styled.pptx")
Editing Existing Presentations
Read and Modify
from pptx import Presentation
prs = Presentation("existing.pptx")
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
if "old text" in run.text:
run.text = run.text.replace("old text", "new text")
prs.save("modified.pptx")
Extract Text
from pptx import Presentation
prs = Presentation("presentation.pptx")
for slide_num, slide in enumerate(prs.slides, 1):
print(f"\n--- Slide {slide_num} ---")
for shape in slide.shapes:
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
print(paragraph.text)
Copy Slides
from pptx import Presentation
from copy import deepcopy
prs = Presentation("source.pptx")
# Note: python-pptx doesn't directly support slide copying
# Use slide layouts from the same presentation instead
Using Templates
Apply Template
from pptx import Presentation
# Open template
prs = Presentation("template.pptx")
# Add slides using template layouts
slide_layout = prs.slide_layouts[1] # Use template's layout
slide = prs.slides.add_slide(slide_layout)
# Fill placeholders
for shape in slide.placeholders:
print(f"{shape.placeholder_format.idx}: {shape.name}")
prs.save("from_template.pptx")
OOXML Editing (Advanced)
For complex modifications, work directly with XML:
Unpack Presentation
unzip presentation.pptx -d presentation_extracted/
Edit XML
Navigate to ppt/slides/ and edit slide1.xml, etc.
Repack
cd presentation_extracted
zip -r ../modified.pptx .
Execution Checklist
- Define presentation purpose and audience
- Plan slide structure before coding
- Use consistent styling throughout
- Verify all images exist and are accessible
- Test output in PowerPoint/LibreOffice
- Check chart data accuracy
- Validate table formatting
Error Handling
Common Errors
Error: KeyError on placeholder
- Cause: Placeholder index doesn't exist in layout
- Solution: List placeholders first with
slide.placeholders
Error: Image not found
- Cause: Image path is incorrect
- Solution: Use absolute paths or verify relative path
Error: Font not available
- Cause: System font missing
- Solution: Use common fonts or embed fonts
Error: PackageNotFoundError
- Cause: Template file not found or corrupt
- Solution: Verify template path and file integrity
Metrics
| Metric | Typical Value |
|---|---|
| Slide creation | ~50 slides/second |
| Chart generation | ~10 charts/second |
| Table creation | ~20 tables/second |
| Image insertion | ~30 images/second |
| Memory usage | ~20MB per presentation |
Quick Reference
| Task | Method |
|---|---|
| Create presentation | Presentation() |
| Add slide | slides.add_slide(layout) |
| Add text | add_textbox() |
| Add image | add_picture() |
| Add chart | add_chart() |
| Add table | add_table() |
| Style text | font.size, font.bold, font.color |
Dependencies
pip install python-pptx
Optional tools:
- LibreOffice (for PDF conversion)
- Pandoc (for format conversion)
Version History
- 1.1.0 (2026-01-02): Added Quick Start, When to Use, Execution Checklist, Error Handling, Metrics sections; updated frontmatter with version, category, related_skills
- 1.0.0 (2024-10-15): Initial release with python-pptx, templates, OOXML editing