У меня есть небольшая консольная программа, которую я пишу, которая использует Open XML SDK 2.0. Я просто хочу получить все снимки на слайде PowerPoint. Когда я запускаю программу, хотя, я получаю следующее сообщение об ошибке:Попытка получить все фотографии в слайде PowerPoint 2010, но получить сообщение об ошибке
Cannot access part because parent package was closed.
Мой РРТ имеет только один слайд с одним изображением. Это всего лишь прототип программы. Я не знаком с Open XML SDK 2.0, поэтому я не уверен, что эта ошибка говорит мне и как ее исправить. Я надеюсь, кто-то может указать мне в правильном направлении. Вот мой код:
using System;
using System.Collections.Generic;
using DocumentFormat.OpenXml.Presentation;
using A = DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml;
using System.Text;
using System.Data;
using System.Linq;
namespace OpenXmlDemo
{
public class Program
{
static void Main(string[] args)
{
var file = @"C:\Users\kjennings\Desktop\Test PPTs\This is the Title - Copy.pptx";
var index = 0;
var slidePart = GetSlidePart(file, index);
var images = slidePart.Slide.Descendants<Picture>().Select(p => p); // error occurs here
foreach (var image in images)
{
// Just placeholder code below. It never makes it here.
var pic = image;
}
}
public static SlidePart GetSlidePart(string docName, int slideIndex)
{
using (var ppt = PresentationDocument.Open(docName, false))
{
// Get the relationship ID of the first slide.
var presentationPart = ppt.PresentationPart;
// Verify that the presenation part and the presenation exist,
if (presentationPart != null && presentationPart.Presentation != null)
{
var presentation = presentationPart.Presentation;
if (presentation.SlideIdList != null)
{
var slideIds = presentation.SlideIdList.ChildElements;
if (slideIndex < slideIds.Count)
{
// Get the relationship ID of the slide.
var slidePartRelationship = (slideIds[slideIndex] as SlideId).RelationshipId;
// Get the specified slide part from the relationship ID.
var slidePart = (SlidePart)presentationPart.GetPartById(slidePartRelationship);
return slidePart;
}
}
}
// No slide found.
return null;
}
}
}
}
Большое спасибо за очень полезный ответ! – Kevin
Счастливые помочь @kevin. – petelids