Productivity
PowerPoint Processing (PPTX)
Create and manipulate Microsoft PowerPoint presentations programmatically. Use when users need to generate, edit, or convert PowerPoint files.
Create and manipulate Microsoft PowerPoint presentations programmatically.
Setup
Installation
pip install python-pptx
Basic Usage
from pptx import Presentation
# Create presentation
prs = Presentation()
# Add slide
slide_layout = prs.slide_layouts[0] # Title slide
slide = prs.slides.add_slide(slide_layout)
# Add content
title = slide.shapes.title
title.text = "Hello, World!"
# Save
prs.save('presentation.pptx')
Presentation Structure
Slide Layouts
# Available layouts
layouts = {
0: 'Title Slide',
1: 'Title and Content',
2: 'Section Header',
3: 'Two Content',
4: 'Comparison',
5: 'Title Only',
6: 'Blank',
7: 'Content with Caption',
8: 'Picture with Caption',
}
Adding Slides
from pptx import Presentation
prs = Presentation()
# Title slide
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Presentation Title"
subtitle.text = "Subtitle"
# Content slide
slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
title.text = "Section Title"
body = slide.placeholders[1]
body.text = "Content goes here"
Content Types
Text Boxes
from pptx.util import Inches, Pt
# Add text box
txBox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(5), Inches(2))
tf = txBox.text_frame
tf.text = "Hello, World!"
# Format text
p = tf.paragraphs[0]
p.text = "Formatted text"
p.font.size = Pt(24)
p.font.bold = True
p.font.color.rgb = RGBColor(0, 0, 255)
Images
from pptx.util import Inches
# Add image
slide.shapes.add_picture('image.png', Inches(1), Inches(1), Inches(4), Inches(3))
Shapes
from pptx.enum.shapes import MSO_SHAPE
# Add shape
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
Inches(1), Inches(1), Inches(2), Inches(1)
)
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(0, 128, 255)
shape.line.color.rgb = RGBColor(0, 0, 0)
Tables
from pptx.util import Inches
# Add table
rows, cols = 4, 3
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(1), Inches(6), Inches(3)).table
# Set column widths
table.columns[0].width = Inches(2)
table.columns[1].width = Inches(2)
table.columns[2].width = Inches(2)
# Add data
for i, row in enumerate(table.rows):
for j, cell in enumerate(row.cells):
cell.text = f'Row {i}, Col {j}'
Advanced Features
Slide Masters
from pptx import Presentation
prs = Presentation()
# Access master
master = prs.slide_masters[0]
# Modify master
for shape in master.shapes:
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
paragraph.font.name = 'Arial'
Charts
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
# Create chart data
chart_data = CategoryChartData()
chart_data.categories = ['January', 'February', 'March']
chart_data.add_series('Series 1', (10, 20, 30))
# Add chart
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
Inches(1), Inches(1), Inches(6), Inches(4),
chart_data
).chart
Animations
from pptx.enum.shapes import MSO_SHAPE
# Add shape
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
Inches(1), Inches(1), Inches(2), Inches(1)
)
# Add animation
from pptx.oxml.ns import qn
from lxml import etree
animation = shape._element.spPr.makeelement(qn('p:anim'), {})
# Configure animation...
Template System
Using Templates
from pptx import Presentation
# Load template
prs = Presentation('template.pptx')
# Modify slides
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
if '{{TITLE}}' in paragraph.text:
paragraph.text = paragraph.text.replace('{{TITLE}}', 'New Title')
# Save
prs.save('output.pptx')
Best Practices
- Use slide masters for consistent styling
- Keep text concise
- Use high-quality images
- Test on different screen sizes
- Consider accessibility
- Use consistent fonts and colors
- Provide speaker notes