Я хочу удалить Slidemasterpart и заголовок фигуры из pptx в c # - PullRequest
0 голосов
/ 16 января 2019

Я новичок в программировании на 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);
        }
...