Мы используем приведенный ниже фрагмент кода, чтобы добавить новый слайд в существующую колоду слайдов.Этот код добавляет содержимое к слайдам правильно, однако при открытии через PowerPoint он говорит, что презентации повреждены и требуют ремонта.После восстановления презентация открывается, однако вновь добавленные слайды отображаются в виде пустых слайдов без содержимого (содержимое содержится в файлах slide.xml, когда файл PPTX разархивирован).
Когдасгенерированная презентация анализируется с помощью «инструмента повышения производительности Open XML SDK 2.5» и выдает следующие сообщения об ошибках:
public SlidePart CopySlidePart(PresentationPart presentationPart, SlidePart slidePart)
{
int i = presentationPart.SlideParts.Count();
//Create a new slide part in the presentation.
SlidePart newSlidePart = presentationPart.AddNewPart<SlidePart>("newSlide" + i);
i++;
//Add the source slide content into the new slide.
newSlidePart.FeedData(slidePart.GetStream(FileMode.Open));
//Make sure the new slide references the proper slide layout.
newSlidePart.AddPart(slidePart.SlideLayoutPart, slidePart.GetIdOfPart(slidePart.SlideLayoutPart));
//Get the list of slide ids.
SlideIdList slideIdList = presentationPart.Presentation.SlideIdList;
//Deternmine where to add the next slide (find max number of slides).
uint maxSlideId = 1;
SlideId prevSlideId = null;
foreach (SlideId slideId in slideIdList.ChildElements)
{
var part = presentationPart.GetPartById(slideId.RelationshipId);
if (part == slidePart)
{
prevSlideId = slideId;
}
if (slideId.Id > maxSlideId)
{
maxSlideId = slideId.Id;
}
}
maxSlideId++;
//Add the new slide at the end of the deck.
SlideId newSlideId = slideIdList.InsertAfter(new SlideId(), prevSlideId);
//Make sure the id and relid are set appropriately.
newSlideId.Id = maxSlideId;
newSlideId.RelationshipId = presentationPart.GetIdOfPart(newSlidePart);
newSlidePart.Slide.Save();
presentationPart.Presentation.Save();
return newSlidePart;
}