Перечисление слайдов PowerPoint по порядку
Я пытаюсь проанализировать существующую PowerPoint 2010 .pptx
файл с использованием OpenXML SDK 2.0.
Чего я пытаюсь добиться, так это
- Перечислите слайды по порядку (как они появляются в PPTX)
- извлечение всех текстовых битов из каждого слайда
Я начал и получил так далеко - я могу перечислить SlideParts
от PresentationPart
- но я не могу найти способ сделать это упорядоченным перечислением - слайды возвращаются в произвольном порядке...
Любой прием, чтобы получить эти слайды в порядке, определенном в файле PPTX?
using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
// Get the presentation part of the document.
PresentationPart presentationPart = doc.PresentationPart;
foreach (var slide in presentationPart.SlideParts)
{
...
}
}
Я надеялся найти что-то вроде SlideID
или же Sequence
число или что-то - некоторый элемент или свойство, которое я мог бы использовать в выражении Linq, как
.OrderBy(s => s.SlideID)
на этой коллекции слайд-частей.
2 ответа
Это немного сложнее, чем я ожидал - и документы иногда немного отрывочны....
В основном мне пришлось перечислить SlideIdList
на PresentationPart
и сделать немного XML-фу, чтобы получить от этого SlideId
к фактическому слайду в презентации OpenXML.
Что-то вроде:
using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
// Get the presentation part of the document.
PresentationPart presentationPart = doc.PresentationPart;
// get the SlideIdList
var items = presentationPart.Presentation.SlideIdList;
// enumerate over that list
foreach (SlideId item in items)
{
// get the "Part" by its "RelationshipId"
var part = presentationPart.GetPartById(item.RelationshipId);
// this part is really a "SlidePart" and from there, we can get at the actual "Slide"
var slide = (part as SlidePart).Slide;
// do more stuff with your slides here!
}
}
Самым близким, что я нашел, был этот фрагмент:
[ИСО / МЭК 29500-1, 1-е издание]
sld (слайд презентации)
Этот элемент определяет слайд в списке слайдов. Список слайдов используется для указания порядка слайдов.
[Пример: рассмотрим следующее пользовательское шоу с упорядочением слайдов.
<p:custShowLst>
<p:custShow name="Custom Show 1" id="0">
<p:sldLst>
<p:sld r:id="rId4"/>
<p:sld r:id="rId3"/>
<p:sld r:id="rId2"/>
<p:sld r:id="rId5"/>
</p:sldLst>
</p:custShow>
</p:custShowLst>In the above example the order specified to present the slides is slide 4, then 3, 2 and finally 5. end example]
В документации MSDN для slide
учебный класс
Кажется, что слайды имеют r:id формы rId##
где ## - номер слайда. Может быть, этого достаточно, чтобы вы снова пошли?