Systematic debugging workflow for python-pptx presentation generation
56
63%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./benchmarks/gdpval/skills/pptx-debug-workflow/SKILL.mdA systematic approach to creating and debugging PowerPoint presentations using the python-pptx library. This workflow ensures reliable presentation generation through iterative verification and error resolution.
Before writing any code, verify that python-pptx is installed:
pip show python-pptxIf not installed:
pip install python-pptxCreate and run a minimal test script to verify the library works:
from pptx import Presentation
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Test Slide"
prs.save("test.pptx")
print("Test presentation created successfully")Run this first to confirm basic functionality before building complex presentations.
Always write your presentation script to a .py file instead of using heredoc or inline execution. This enables:
Example structure:
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION
from pptx.chart.data import CategoryChartData
def create_presentation():
prs = Presentation()
# Build slides here
prs.save("output.pptx")
print("Presentation saved successfully")
if __name__ == "__main__":
create_presentation()Run the script with full error output:
python your_script.py 2>&1 | tee debug_output.logThis captures the complete Python traceback including:
Common python-pptx API patterns to remember:
Use XL_LEGEND_POSITION (NOT XL_CHART_TYPE) for legend positioning:
from pptx.enum.chart import XL_LEGEND_POSITION
chart.chart.has_legend = True
chart.chart.legend.position = XL_LEGEND_POSITION.RIGHTAccess table cells through row iteration pattern:
table = slide.shapes.add_table(rows=5, cols=4, left=Inches(1), top=Inches(2), width=Inches(6), height=Inches(3)).table
# Correct pattern - iterate through rows, then cells
for row_idx, row in enumerate(table.rows):
for cell_idx, cell in enumerate(row.cells):
cell.text = f"Row {row_idx}, Cell {cell_idx}"
# Or direct access
table.rows[0].cells[0].text = "Header"For pie charts, use category-based data:
chart_data = CategoryChartData()
chart_data.categories = ['Category A', 'Category B', 'Category C']
chart_data.add_series('Series 1', (30, 45, 25))
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
slide.shapes.add_chart(XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data)After successful execution:
.pptx file was created| Issue | Solution |
|---|---|
| Module not found | pip install python-pptx |
| AttributeError on chart | Check XL_LEGEND_POSITION vs XL_CHART_TYPE |
| Table cell access fails | Use table.rows[row].cells[cell] pattern |
| Chart doesn't display | Verify chart_data format matches chart type |
| Import errors | Check enum imports from pptx.enum.* |
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION
from pptx.chart.data import CategoryChartData
def main():
prs = Presentation()
# Add title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Title"
# Add content slide with table
slide = prs.slides.add_slide(prs.slide_layouts[1])
table = slide.shapes.add_table(3, 3, Inches(1), Inches(2), Inches(8), Inches(2)).table
for row in table.rows:
for cell in row.cells:
cell.text = "Data"
prs.save("presentation.pptx")
print("Done!")
if __name__ == "__main__":
main()c5a9c4b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.