Получить количество слайдов в документе презентации
В этом разделе показано, как использовать классы в пакете SDK Open XML для Office для программного извлечения количества слайдов в документе презентации, включая скрытые слайды или нет, без загрузки документа в Microsoft PowerPoint. Он содержит пример RetrieveNumberOfSlides
метода для иллюстрации этой задачи.
Метод RetrieveNumberOfSlides
Метод можно использовать RetrieveNumberOfSlides
для получения количества слайдов в документе презентации, при необходимости включая скрытые слайды. Метод RetrieveNumberOfSlides
принимает два параметра: строку, указывающую путь к файлу, который требуется изучить, и необязательное логическое значение, указывающее, следует ли включать скрытые слайды в число.
static int RetrieveNumberOfSlides(string fileName, string includeHidden = "true")
Вызов метода RetrieveNumberOfSlides
Метод возвращает целое число, обозначающее количество слайдов; при этом учитываются либо все слайды, либо только видимые слайды (в зависимости от значения второго параметра). Чтобы вызвать метод, передайте все значения параметров, как показано в следующем коде:
if (args is [{ } fileName, { } includeHidden])
{
RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
RetrieveNumberOfSlides(fileName2);
}
Принципы работы кода
Код начинается с создания целочисленной переменной , slidesCount
для хранения количества слайдов. Затем код открывает указанную презентацию с помощью Open метода и указывает, что документ должен быть открыт для доступа только для чтения (конечное false
значение параметра). При открытой презентации код использует PresentationPart свойство для перехода к части презентации main, сохраняя ссылку в переменной с именем presentationPart
.
using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
if (doc.PresentationPart is not null)
{
// Get the presentation part of the document.
PresentationPart presentationPart = doc.PresentationPart;
Получение количества всех слайдов
Если ссылка на часть презентации не имеет значения NULL (и она не будет иметь значение для любой допустимой презентации, которая правильно загружается в PowerPoint), код затем вызывает Count
метод для значения SlideParts свойства части презентации. Если запрошены все слайды, включая скрытые, то задачу можно считать выполненной. Если требуется исключить скрытые слайды, необходимо проделать некоторую дополнительную работу, как показано в следующем коде:
if (includeHidden.ToUpper() == "TRUE")
{
slidesCount = presentationPart.SlideParts.Count();
}
else
{
Получение количества видимых слайдов
Если вы попросили, чтобы код ограничил возвращаемое значение только видимыми слайдами, код должен отфильтровать свою коллекцию слайдов, чтобы включить только те слайды, которые имеют Show свойство, содержащее значение, и значение равно true
.
Show
Если свойство имеет значение NULL, это также означает, что слайд виден. Это наиболее вероятный сценарий. Как правило, PowerPoint не задает значение этого свойства, если слайд не должен быть скрыт. Единственным способом Show
существования свойства и его значения true
было бы, если бы вы были скрыты, а затем расшифовываете слайд. Следующий код использует функцию Where с лямбда-выражением для выполнения работы.
// Each slide can include a Show property, which if hidden
// will contain the value "0". The Show property may not
// exist, and most likely will not, for non-hidden slides.
var slides = presentationPart.SlideParts.Where(
(s) => (s.Slide is not null) &&
((s.Slide.Show is null) || (s.Slide.Show.HasValue && s.Slide.Show.Value)));
slidesCount = slides.Count();
Пример кода
Ниже приведен полный RetrieveNumberOfSlides
пример кода на C# и Visual Basic.
if (args is [{ } fileName, { } includeHidden])
{
RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
RetrieveNumberOfSlides(fileName2);
}
static int RetrieveNumberOfSlides(string fileName, string includeHidden = "true")
{
int slidesCount = 0;
using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
if (doc.PresentationPart is not null)
{
// Get the presentation part of the document.
PresentationPart presentationPart = doc.PresentationPart;
if (presentationPart is not null)
{
if (includeHidden.ToUpper() == "TRUE")
{
slidesCount = presentationPart.SlideParts.Count();
}
else
{
// Each slide can include a Show property, which if hidden
// will contain the value "0". The Show property may not
// exist, and most likely will not, for non-hidden slides.
var slides = presentationPart.SlideParts.Where(
(s) => (s.Slide is not null) &&
((s.Slide.Show is null) || (s.Slide.Show.HasValue && s.Slide.Show.Value)));
slidesCount = slides.Count();
}
}
}
}
Console.WriteLine($"Slide Count: {slidesCount}");
return slidesCount;
}