Enumerating PowerPoint slides in order

c#-4.0, openxml-sdk, powerpoint-2010

Solution

It's a bit more involved than I had hoped for - and the docs are a bit sketchy at times....

Basically, I had to enumerate the `SlideIdList` on the `PresentationPart` and do some XML-foo to get from that `SlideId` to the actual slide in the OpenXML presentation.

Something along the lines of:

using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
    // Get the presentation part of the document.
    PresentationPart presentationPart = doc.PresentationPart;

    // get the SlideIdList
    var items = presentationPart.Presentation.SlideIdList;

    // enumerate over that list
    foreach (SlideId item in items)
    {
        // get the "Part" by its "RelationshipId"
        var part = presentationPart.GetPartById(item.RelationshipId);

        // this part is really a "SlidePart" and from there, we can get at the actual "Slide"
        var slide = (part as SlidePart).Slide;

        // do more stuff with your slides here!
    }
}

Problem

I'm trying to analyze an existing PowerPoint 2010 `.pptx` file using the OpenXML SDK 2.0. What I'm trying to achieve is to - enumerate the slides in order (as they appear in the PPTX) - extracting all textual bits from each slide I've started and gotten so far - I can enumerate the `SlideParts` from the `PresentationPart` - but I cannot seem to find a way to make this an ordered enumeration - the slides are being returned in pretty much arbitrary order... Any trick to get these slides in the order defined in the PPTX file? ``` using (PresentationDocument doc = PresentationDocument.Open(fileName, false)) { // Get the presentation part of the document. PresentationPart presentationPart = doc.PresentationPart; foreach (var slide in presentationPart.SlideParts) { ... } } ``` I was hoping to find something like a `SlideID` or `Sequence` number or something - some item or property I could use in a Linq expression like ``` .OrderBy(s => s.SlideID) ``` on that slideparts collection.

Original source