| name | pptx |
| description | Professional PowerPoint presentation creation, editing, and automation with support for layouts, templates, charts, images, and formatting. Use when working with .pptx files for: (1) Creating presentations from scratch, (2) Editing existing presentations, (3) Applying templates and themes, (4) Adding charts and visualizations, (5) Bulk slide generation, (6) Presentation automation |
PowerPoint (PPTX) Skill
Overview
This skill provides comprehensive PowerPoint presentation creation, editing, and automation capabilities using Python's python-pptx library. Create professional presentations programmatically with full control over layouts, themes, content, charts, and visualizations.
Core Capabilities
- Presentation Creation: New presentations, templates, metadata, page configuration
- Slide Management: Add, duplicate, delete, reorder slides with predefined layouts
- Content Types: Text, shapes, images, tables, charts, SmartArt, hyperlinks
- Design & Formatting: Themes, color schemes, fonts, fills, borders, effects
- Advanced Features: Transitions, animations, embedded objects, video/audio, comments
Installation
Install the required library:
pip install python-pptx
# or with uv
uv pip install python-pptx
Basic imports:
from pptx import Presentation
from pptx.util import Inches, Pt, Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
For complete library setup and supporting packages (Pillow, pandas, matplotlib), see references/library-setup.md.
Core Workflows
Workflow 1: Creating a Business Presentation
Goal: Create a professional presentation with title slide, content slides, and conclusion.
Steps:
Initialize Presentation
- Create new presentation object
- Set slide dimensions (standard 16:9 or 4:3)
- Configure metadata (title, author, subject, keywords)
Add Title Slide
- Use title slide layout (typically
prs.slide_layouts[0]) - Set title and subtitle text
- Apply formatting (font size, color, bold)
- Use title slide layout (typically
Add Content Slides
- Use appropriate layouts (bullet, two-column, title-only, blank)
- Populate placeholders or add text boxes
- Format text with proper hierarchy
Add Visual Elements
- Insert images with proper sizing and positioning
- Add charts with formatted data
- Create tables with cell styling
Save Presentation
- Save to .pptx format
- Verify file creation
Quick Example:
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
prs.slide_width = Inches(10)
prs.slide_height = Inches(7.5)
# Title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Q4 Business Review"
slide.placeholders[1].text = "Prepared by: Jane Doe\nDate: October 25, 2025"
prs.save('presentation.pptx')
See examples/business-presentation.md for complete implementation.
Workflow 2: Adding Charts
Goal: Create data visualizations with bar, line, and pie charts.
Steps:
- Prepare chart data using
CategoryChartData - Define categories and series
- Add chart to slide with positioning
- Format chart (legend, gridlines, labels)
Quick Example:
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('2025', (9.5, 10.8, 11.2, 13.1))
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
Inches(1), Inches(2), Inches(8), Inches(4.5),
chart_data
).chart
See examples/chart-examples.md for all chart types.
Workflow 3: Working with Images
Goal: Add, position, and format images in presentations.
Steps:
- Add image with
slide.shapes.add_picture() - Specify position (left, top) and size (width, height)
- Calculate centered positioning if needed
- Optimize images before adding (use Pillow for preprocessing)
Quick Example:
# Add image with auto-scaled aspect ratio
pic = slide.shapes.add_picture('logo.png', Inches(1), Inches(1), height=Inches(2))
# Center image on slide
pic.left = int((prs.slide_width - pic.width) / 2)
pic.top = int((prs.slide_height - pic.height) / 2)
See examples/image-handling.md for advanced techniques.
Workflow 4: Creating Tables
Goal: Add structured data tables with formatting.
Steps:
- Define table dimensions (rows, cols)
- Add table with positioning
- Set column widths
- Populate headers with bold formatting and background color
- Fill data cells with proper alignment
Quick Example:
table = slide.shapes.add_table(4, 3, Inches(1.5), Inches(2), Inches(7), Inches(3)).table
# Header formatting
cell = table.cell(0, 0)
cell.text = "Product"
cell.text_frame.paragraphs[0].font.bold = True
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(0, 51, 102)
See examples/table-examples.md for advanced formatting.
Workflow 5: Editing Existing Presentations
Goal: Modify existing PowerPoint files.
Steps:
- Open presentation with
Presentation('file.pptx') - Iterate through slides to find content
- Modify text, shapes, or add new elements
- Save with same or different filename
Quick Example:
prs = Presentation('existing.pptx')
# Find and update text
for slide in prs.slides:
for shape in slide.shapes:
if hasattr(shape, "text") and "Old Name" in shape.text:
shape.text = shape.text.replace("Old Name", "New Name")
prs.save('updated.pptx')
See examples/editing-presentations.md for slide copying and advanced editing.
Workflow 6: Using Templates
Goal: Apply consistent branding with master slides and templates.
Steps:
- Start with template file:
Presentation('template.pptx') - Examine available layouts
- Add slides using template layouts
- Apply brand colors consistently
Quick Example:
prs = Presentation('corporate_template.pptx')
# Use template layouts
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
content_slide = prs.slides.add_slide(prs.slide_layouts[1])
# Layouts inherit master formatting
prs.save('branded_presentation.pptx')
See references/templates-and-themes.md for master slide customization.
Workflow 7: Bulk Slide Generation
Goal: Generate multiple slides automatically from data.
Steps:
- Load data from CSV, JSON, or database
- Create presentation object
- Iterate through data records
- Generate one slide per record
- Populate slide with record data
Quick Example:
import pandas as pd
df = pd.read_csv('employee_data.csv')
prs = Presentation()
for _, row in df.iterrows():
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = row['Name']
# Add employee details to slide body
prs.save('employee_directory.pptx')
See examples/bulk-generation.md for complete implementations.
Design Principles
Color & Typography
- Use 60-30-10 color rule (60% primary, 30% secondary, 10% accent)
- Ensure WCAG AA contrast ratios (4.5:1 minimum)
- Limit to 2 font families maximum
- Minimum body text: 18pt for readability
Layout & Composition
- Follow rule of thirds for element placement
- Maintain minimum 0.5" margins on all sides
- Limit to 5-7 elements per slide
- Use consistent alignment (snap to grid)
Visual Hierarchy
- Size indicates importance (larger = more important)
- Use color contrast for emphasis
- Follow Z-pattern for content flow
Chart Best Practices
- Choose appropriate chart type (bar for comparison, line for trends, pie for parts-of-whole)
- Limit to 3-5 colors maximum
- Always label axes and include data labels
- Use gridlines sparingly
For complete design guidelines, see references/design-best-practices.md.
Common Patterns
Brand Color Application
BRAND_COLORS = {
'primary': RGBColor(0, 51, 102),
'secondary': RGBColor(0, 153, 204),
'accent': RGBColor(255, 102, 0)
}
# Apply to text
shape.text_frame.paragraphs[0].font.color.rgb = BRAND_COLORS['primary']
# Apply to fill
shape.fill.solid()
shape.fill.fore_color.rgb = BRAND_COLORS['secondary']
Centered Element
def center_shape(shape, prs):
"""Center shape on slide."""
shape.left = int((prs.slide_width - shape.width) / 2)
shape.top = int((prs.slide_height - shape.height) / 2)
Text Auto-Fit
from pptx.enum.text import MSO_AUTO_SIZE
text_frame = shape.text_frame
text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE # Shrink text
# or
text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT # Expand shape
Troubleshooting Quick Reference
"ModuleNotFoundError: No module named 'pptx'"
pip install python-pptx
"AttributeError: 'NoneType' object has no attribute..."
- Check placeholder indices:
[p.placeholder_format.idx for p in slide.placeholders] - Verify layout has expected placeholders
Images not found
- Use absolute paths:
os.path.abspath('image.png') - Verify file exists:
os.path.exists(img_path)
Text doesn't fit
- Enable auto-fit:
text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE - Truncate long text with ellipsis
File size too large
- Compress images before adding (use Pillow)
- Resize images to presentation dimensions (1920x1080 max)
For complete troubleshooting, see references/troubleshooting.md.
Helper Scripts
The scripts/pptx_helper.py module provides utility functions:
create_presentation(): Initialize with defaultsadd_title_slide(): Add formatted title slideadd_bullet_slide(): Add slide with bullet pointsadd_image_slide(): Add slide with centered imageadd_chart_slide(): Add slide with chartadd_table_slide(): Add formatted tableapply_brand_colors(): Apply consistent color schemeoptimize_images(): Batch optimize images
Usage:
from scripts.pptx_helper import create_presentation, add_title_slide, add_chart_slide
prs = create_presentation(title="My Presentation")
add_title_slide(prs, "Main Title", "Subtitle")
add_chart_slide(prs, "Sales Data", chart_type='bar',
categories=['Q1', 'Q2', 'Q3', 'Q4'],
values=[10, 20, 15, 25])
prs.save('output.pptx')
Additional Resources
Documentation
- python-pptx: https://python-pptx.readthedocs.io/
- API Reference: https://python-pptx.readthedocs.io/en/latest/api/
- GitHub: https://github.com/scanny/python-pptx
Detailed References
- Library Setup & Installation
- Design Best Practices
- Templates & Themes
- Advanced Techniques
- Common Pitfalls
Examples
- Complete Business Presentation
- Chart Examples (Bar, Line, Pie)
- Image Handling
- Table Examples
- Editing Existing Presentations
- Bulk Generation from Data
Design Resources
- Microsoft Design Templates: https://templates.office.com/powerpoint
- Color Palette Tools: Coolors.co, Adobe Color
- Free Stock Images: Unsplash, Pexels
Best Practices Summary
- Always use templates for consistent branding
- Optimize images before adding to presentation
- Limit text on each slide (5-7 bullet points max)
- Use high contrast for readability
- Test on target device before presenting
- Keep file size manageable (<20MB for email)
- Use speaker notes for detailed talking points
- Follow 6x6 rule: Max 6 bullets, max 6 words per bullet
- Validate data before creating charts
- Use consistent spacing and alignment
When to Use This Skill:
- Creating business presentations from data
- Automating report generation
- Bulk slide creation from databases
- Template-based presentations
- Educational content with charts/images
- Converting documents to slides