Вопрос или проблема
Я создал VSTO AddIn на C# – с лентой и панелью задач. Моя цель – сохранить некоторые ручные фигуры в POTX, которые я могу считать из своего AddIn и предоставить для вставки на слайд.
Я нов в openXML и customXMLPart – но уже пробовал что-то делать, например, сохранить некоторые данные в customXMLPart и считать их позже. Я читал, что файл openXML может содержать не только теги, слайды и т.д., но и фигуры.
Как мне вставить в POTX пользовательскую фигуру, которая затем будет доступна в новосозданном файле PPTX и может быть вызвана из AddIn для вставки на слайд?
Есть идеи?
Ответ или решение
Хранение фигур PowerPoint в шаблоне POTX с использованием OpenXML может быть непростой задачей, особенно для новичка. Ниже проиллюстрированы основные шаги, которые помогут вам сохранить созданные вами фигуры в файле POTX, чтобы затем можно было их извлекать и использовать в создаваемых вами PPTX-файлах.
Шаги для хранения фигур PowerPoint в POTX с использованием OpenXML:
-
Создание фигур:
Вы можете создать фигуры с помощью OpenXML SDK, используя классDrawing
и другие требуемые классы. Фигуры в PowerPoint представляются в виде объектов, размещенных в месте, соответствующем вашему слайду. -
Добавление фигур в шаблон POTX:
Вам нужно добавить ваши собственные фигуры вppt/slides/slide1.xml
, если вы хотите сохранить их в шаблоне. Для этого используйтеDrawingElement
, как показано ниже:using (PresentationDocument presentationDocument = PresentationDocument.Open(@"путь\к\шаблону.potx", true)) { SlidePart slidePart = presentationDocument.PresentationPart.SlideParts.First(); // Используйте нужный вам SlidePart // Создайте фигуру var shape = new Shape(new NonVisualShapeProperties(new NonVisualDrawingProperties(), new NonVisualShapeDrawingProperties()), new ShapeProperties(), new TextBody(new BodyProperties(), new List<Paragraph>())); slidePart.AddChild(shape); slidePart.Slide.Save(); }
-
Создание customXMLPart:
Если вы хотите сохранить дополнительные данные, например, параметры фигур или их характеристики, вы можете использоватьCustomXMLPart
. Это делается следующим образом:var customPart = presentationDocument.PresentationPart.AddCustomXmlPart("application/vnd.ms-officexml.customxml"); // Замените тип MIME на нужный using (StreamWriter writer = new StreamWriter(customPart.GetStream())) { writer.Write("<Shapes><Shape><Name>My Shape</Name></Shape></Shapes>"); // Сохраните нужные данные в XML формате }
-
Доступ к фигурам и customXMLPart в AddIn:
Позже, когда ваш AddIn будет загружен, вы сможете извлечь эти фигуры и данные из customXMLPart. Для этого выполните следующие действия:using (PresentationDocument presentationDocument = PresentationDocument.Open(@"путь\к\файлу.pptx", false)) { foreach (var customXmlPart in presentationDocument.PresentationPart.CustomXmlParts) { using (StreamReader reader = new StreamReader(customXmlPart.GetStream())) { string xmlData = reader.ReadToEnd(); // Здесь вы можете обработать xmlData на необходимость } } }
-
Вставка или использование сохранённых фигур:
При создании новой презентации PPTX вы захотите использовать сохраненные фигуры. Вы можете извлечь их и вновь добавить на слайды с использованием методов, аналогичных тем, которые были использованы при добавлении их в POTX.
Заключение
Теперь у вас есть общее представление о том, как сохранить фигуры PowerPoint в POTX и получить к ним доступ через ваш VSTO AddIn с использованием OpenXML. Не стесняйтесь экспериментировать с различными свойствами и элементами, чтобы адаптировать функционал под ваши нужды. Если у вас появятся дополнительные вопросы, не стесняйтесь спрашивать!