Skip to content

PowerPoint .NET library for reading, modifying, and generating PPTX presentations without Microsoft Office

License

Notifications You must be signed in to change notification settings

ShapeCrawler/ShapeCrawler

ShapeCrawler

PRs Welcome Nuget GitHub Help Wanted issues

PowerPoint (PPTX) manipulation library for .NET / C# developers

ShapeCrawler provides a clean, intuitive API on top of the Open XML SDK, making it easy to read, create, and modify .pptx files programmatically.


📦 Installation

dotnet add package ShapeCrawler

🚀 Getting Started

// Load an existing presentation
var pres = new Presentation("presentation.pptx");

// Access shapes on a slide
var shapes = pres.Slide(1).Shapes;
var textBox = shapes.Shape("TextBox 1");

// Read text content
var text = textBox.TextBox.Text;

// Modify and save
textBox.TextBox.SetText("Updated content");
pres.Save();

🎯 Why ShapeCrawler?

  • No Office Required – Process presentations on any platform without Microsoft Office installation
  • Clean API – Intuitive object model that hides the complexity of Open XML
  • Open Source — Actively maintained

💡 Common Use Cases

Create presentations

// Create a new presentation with a slide
var pres = new Presentation(p => p.Slide());

// Add a shape with text
var shapes = pres.Slide(1).Shapes;
shapes.AddShape(x: 50, y: 60, width: 100, height: 70);

var addedShape = shapes.Last();
addedShape.TextBox.SetText("Hello World!");

pres.Save("output.pptx");

Update image

var pres = new Presentation("presentation.pptx");
var picture = pres.Slide(1).Shape("Picture 1").Picture;

// Replace the image
using var newImage = File.OpenRead("new-image.png");
picture.Image.Update(newImage);

pres.Save();

Tables

Create table

var pres = new Presentation("presentation.pptx");
var shapes = pres.Slide(1).Shapes;

// Add a 3x2 table at position (50, 120)
shapes.AddTable(x: 50, y: 120, columnsCount: 3, rowsCount: 2);

var table = shapes.Last().Table;
table[0, 0].TextBox.SetText("Hello table");

pres.Save();

Update table

var pres = new Presentation("presentation.pptx");
var table = pres.Slide(1).Shapes.Shape("Table 1").Table;

// Insert a row at index 1, using row 0 as a template
table.Rows.Add(1, 0);

// Merge two header cells
table.MergeCells(table[0, 0], table[0, 1]);

pres.Save();

Lines

Adding a straight line

var pres = new Presentation("presentation.pptx");
var shapes = pres.Slide(1).Shapes;

// Add a line from (50, 60) to (100, 60)
shapes.AddLine(startPointX: 50, startPointY: 60, endPointX: 100, endPointY: 60);

Accessing Start and End Points

var pres = new Presentation("presentation.pptx");
var line = pres.Slide(1).Shapes.First(shape => shape.GeometryType == Geometry.Line).Line;

var start = line.StartPoint; // Point(x, y)
var end = line.EndPoint;     // Point(x, y)
Console.WriteLine($"Line from {start.X},{start.Y} to {end.X},{end.Y}");

Charts

Create Bar Chart

var pres = new Presentation(p => p.Slide());
var shapes = pres.Slide(1).Shapes;

var points = new Dictionary<string, double>
{
    { "Q1", 50 },
    { "Q2", 60 },
    { "Q3", 40 }
};

// Add a bar chart
shapes.AddBarChart(x: 100, y: 100, width: 500, height: 350, points, "Sales");

pres.Save("output.pptx");

Update Chart Category

var pres = new Presentation("presentation.pptx");
var chart = pres.Slide(1).Shapes.Shape("Bar Chart 1").Chart;

// Update category name
chart.Categories[0].Name = "Renamed Category";

pres.Save();

More Examples

See More Examples

❓ Getting Help

Have questions? We're here to help!

🤝 Contributing

We love contributions! Here's how you can help:

  • Give us a star ⭐ – If you find ShapeCrawler useful, show your support with a star!
  • Reporting Bugs – Found a bug? Open an issue with a clear description of the problem
  • Contribute Code – Pull requests are welcome!
  • Need to share a confidential file? – Email it to [email protected] – only the maintainer will access it

🔄 Pre-release Versions

Want to try the latest features? Access pre-release builds from the master branch using the following NuGet: https://www.myget.org/F/shape/api/v3/index.json

📝 Changelog

Version 0.77.1 - 2025-12-31

🐞Resolved potential security vulnerabilities

View Full Changelog

About

PowerPoint .NET library for reading, modifying, and generating PPTX presentations without Microsoft Office

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

Languages