Search code examples
c#powerpointopenxmlopenxml-sdkpresentation

Remove all animations pptx from Powerpoint Presentation using OpenXML SDK


I'm currently working on editing my existing PowerPoint file (.pptx) using OpenXML SDK. Can I know how to remove all animations from my PowerPoint presentation?

The reason for this is I want a clean non-animated ppt for my use case. I've checked everywhere and there is minimal to no documentation regarding animation using OpenXML.

Thanks.


Solution

  • Yeah, here's how I do it with the Timing class, it's pretty straight-forward.

    In VB.Net:

    Imports Presentation = DocumentFormat.OpenXml.Presentation
    Imports DocumentFormat.OpenXml.Packaging
    Module Module1
    
        Sub Main()
            Dim fileName As String = "C:\folder\New PPTX Presentation.pptx"
    
            Using deck As PresentationDocument = PresentationDocument.Open(fileName, True)
                For Each slidePart As SlidePart In deck.PresentationPart.SlideParts
                    Dim animationTimings As IEnumerable(Of Presentation.Timing) = slidePart.Slide.Descendants(Of Presentation.Timing)()
                    For Each animationTiming As Presentation.Timing In animationTimings
                        animationTiming.Remove()
                    Next
                Next
            End Using
    
        End Sub
    End Module
    

    In C#:

    using Presentation = DocumentFormat.OpenXml.Presentation;
    using DocumentFormat.OpenXml.Packaging;
    
    static class Module1
    {
        public static void Main()
        {
            string fileName = @"C:\folder\New PPTX Presentation.pptx";
    
            using (PresentationDocument deck = PresentationDocument.Open(fileName, true))
            {
                foreach (SlidePart slidePart in deck.PresentationPart.SlideParts)
                {
                    IEnumerable<Presentation.Timing> animationTimings = slidePart.Slide.Descendants<Presentation.Timing>();
                    foreach (Presentation.Timing animationTiming in animationTimings)
                        animationTiming.Remove();
                }
            }
        }
    }