#powerpoint #openxml
#powerpoint #openxml
Вопрос:
Я извлекаю данные из документов PowerPoint, читая базовый xml.
Я хочу получить имя основного макета слайда, который использует конкретный слайд, но я не могу понять, как получить эту информацию из рассматриваемого элемента слайда.
Например, мой мастер слайдов имеет много макетов, и один из них вызывается 1_Title Slide
.
Я могу открыть xml и довольно легко найти список основных макетов и имен слайдов. Макет slidemaster, который я хочу, выглядит следующим образом:
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" showMasterSp="0" userDrawn="1"><p:cSld name="1_Title Slide"> ... </p:sldLayout>
Где имя layut ясно 1_Title Slide
.
Однако, когда я ищу эту строку в элементе <p:sld />
слайда, который, как я знаю, использует этот макет, я не могу найти этот текст. Макет содержит множество различных элементов и атрибутов, предположительно потому, что рассматриваемый макет имеет несколько заполнителей и фигур, и поэтому нелегко выяснить, как xml может ссылаться на него. Какой тег или атрибут в openxml хранит «уникальный идентификатор» макета в элементе слайда? Как это отображается?
Комментарии:
1. Интересно, может ли python-pptx сделать это за вас — или, по крайней мере, вдохновить вас на то, как это сделать.
Ответ №1:
Просто чтобы вы знали, макет с заголовком типа 1_Title Slide — это случайный макет, который попал туда путем вставки слайда из другой презентации. Он не является родным для шаблона или темы.
Ссылки на связи между частями XML найдите в папке _rels файл связи. Итак slide1.xml там будет файл с именем slide1.xml.rels. Одна из записей будет выглядеть примерно так:
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout7.xml"/>
Затем откройте slideLayout7.xml и получите название макета.
Ответ №2:
Согласно документации Microsoft, Open XML SDK определяется следующим образом:
Open XML SDK 2.5 упрощает задачу управления пакетами Open XML и базовыми элементами схемы Open XML в пакете. Open XML SDK 2.5 инкапсулирует многие общие задачи, которые разработчики выполняют в пакетах Open XML, так что вы можете выполнять сложные операции с помощью всего нескольких строк кода.
Но, похоже, решить вашу проблему с макетами слайдов с помощью Open XML SDK непросто. Если вы используете Aspose.Слайды для .NET вы получите макет слайда, как показано ниже:
using var presentation = new Presentation("example.pptx");
var firstSlide = presentation.Slides[0];
var layoutName = firstSlide.LayoutSlide.Name;
Документация | Ссылка на API | Бесплатный форум
Вы также можете оценить Aspose.Облако слайдов для управления презентацией. Этот API на основе REST позволяет вам совершать 150 бесплатных вызовов API в месяц для изучения API и обработки презентаций.
Я работаю в Aspose.
Комментарии:
1. Эта строка: «использование презентации var = новая презентация («example.pptx «)» наводит меня на мысль, что ваш пример — это автоматизация экземпляра PowerPoint. Это правильно? Если это так, обратите внимание, что OP может работать с XML, потому что они не могут предположить, что PPT установлен.
2. Аспозе. Слайды для .NET не требуют установки PowerPoint. Эта строка кода создает экземпляр класса представления. Ссылка на API: apireference.aspose.com/slides/net/aspose.slides/presentation
3. Спасибо за исправление. Это очень полезно знать.