我想从C#中的pptx中删除Slidemasterpart和Title形状

时间:2019-01-16 16:37:23

标签: c# openxml-sdk

我是C#编程的初学者。 我使用openxml插入了新幻灯片。但是幻灯片中始终有SlideMaster零件和标题形状。 我试图删除这些,但是我找不到实现我想法的方法。 因此,我需要您的帮助。请提出建议。 下面的代码是我尝试过的。

public Slide InsertSlide(PresentationPart presentationPart, string layoutName)
        {
            UInt32 slideId = 256U;

            // Get the Slide Id collection of the presentation document
            var slideIdList = presentationPart.Presentation.SlideIdList;

            if (slideIdList == null)
            {
                throw new NullReferenceException("The number of slide is empty, please select a ppt with a slide at least again");
            }

            slideId += Convert.ToUInt32(slideIdList.Count());

            // Creates a Slide instance and adds its children.
            Slide slide = new Slide(new CommonSlideData(new ShapeTree()));

            SlidePart slidePart = presentationPart.AddNewPart<SlidePart>();
            slide.Save(slidePart);

            // Get SlideMasterPart and SlideLayoutPart from the existing Presentation Part
            SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.First();
            SlideLayoutPart slideLayoutPart = slideMasterPart.SlideLayoutParts.SingleOrDefault
                (sl => sl.SlideLayout.CommonSlideData.Name.Value.Equals(layoutName, StringComparison.OrdinalIgnoreCase));
            if (slideLayoutPart == null)
            {
                throw new Exception("The slide layout " + layoutName + " is not found");
            }


            slidePart.Slide.CommonSlideData = (CommonSlideData)slideMasterPart.SlideLayoutParts.SingleOrDefault(
               sl => sl.SlideLayout.CommonSlideData.Name.Value.Equals(layoutName)).SlideLayout.CommonSlideData.Clone();

            var oleObjectsCount = slidePart.Slide.Descendants<OleObject>().Count();

            while (oleObjectsCount > 0)
            {
                var oleObj = slidePart.Slide.Descendants<OleObject>().FirstOrDefault();
                var oleObjGraphicFrame = oleObj?.Ancestors<GraphicFrame>().FirstOrDefault();
                if (oleObjGraphicFrame != null)
                {
                    oleObjGraphicFrame.RemoveAllChildren();
                    oleObjGraphicFrame.Remove();
                }
                oleObjectsCount = slidePart.Slide.Descendants<OleObject>().Count();
            }

            Presentation pr = presentationPart.Presentation;

            pr.SlideMasterIdList.Remove();            
            slidePart.DeleteParts(slidePart.EmbeddedObjectParts);
            slidePart.DeleteParts(slidePart.ImageParts);

            slidePart.AddPart<SlideLayoutPart>(slideLayoutPart);
            slide.Save(slidePart);
            // Create SlideId instance and Set property
            SlideId newSlideId = presentationPart.Presentation.SlideIdList.AppendChild<SlideId>(new SlideId());
            newSlideId.Id = slideId;
            newSlideId.RelationshipId = presentationPart.GetIdOfPart(slidePart);

            return GetSlideByRelationShipId(presentationPart, newSlideId.RelationshipId);
        }

0 个答案:

没有答案