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 defaults - •
add_title_slide(): Add formatted title slide - •
add_bullet_slide(): Add slide with bullet points - •
add_image_slide(): Add slide with centered image - •
add_chart_slide(): Add slide with chart - •
add_table_slide(): Add formatted table - •
apply_brand_colors(): Apply consistent color scheme - •
optimize_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