Recuperar o número de slides no documento de uma apresentação
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para obter programaticamente o número de diapositivos num documento de apresentação, incluindo diapositivos ocultos ou não, sem carregar o documento para o Microsoft PowerPoint. Contém um método de exemplo RetrieveNumberOfSlides
para ilustrar esta tarefa.
RetrieveNumberOfSlides Method
Pode utilizar o RetrieveNumberOfSlides
método para obter o número de diapositivos num documento de apresentação, incluindo opcionalmente os diapositivos ocultos. O RetrieveNumberOfSlides
método aceita dois parâmetros: uma cadeia que indica o caminho do ficheiro que pretende examinar e um valor Booleano opcional que indica se deve incluir diapositivos ocultos na contagem.
static int RetrieveNumberOfSlides(string fileName, string includeHidden = "true")
Chamar o Método RetrieveNumberOfSlides
O método devolve um número inteiro que indica o número de diapositivos, contando todos os diapositivos ou apenas diapositivos visíveis, dependendo do segundo valor do parâmetro. Para chamar o método , transmita todos os valores de parâmetros, conforme mostrado no código seguinte.
if (args is [{ } fileName, { } includeHidden])
{
RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
RetrieveNumberOfSlides(fileName2);
}
Como Funciona o Código
O código começa por criar uma variável de número inteiro, slidesCount
, para conter o número de diapositivos. Em seguida, o código abre a apresentação especificada utilizando o Open método e indicando que o documento deve estar aberto para acesso só de leitura (o valor do parâmetro final false
). Tendo em conta a apresentação aberta, o código utiliza a PresentationPart propriedade para navegar para a peça de apresentação main, armazenando a referência numa variável chamada 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;
Obter a Contagem de Todos os Diapositivos
Se a referência da peça de apresentação não for nula (e não será, para qualquer apresentação válida que carregue corretamente para o PowerPoint), o código seguinte chama o Count
método no valor da SlideParts propriedade da peça de apresentação. Se tiver pedido todos os diapositivos, incluindo diapositivos ocultos, é tudo o que precisa de fazer. Existe um pouco mais de trabalho a ser feito se quiser excluir diapositivos ocultos, conforme mostrado no código seguinte.
if (includeHidden.ToUpper() == "TRUE")
{
slidesCount = presentationPart.SlideParts.Count();
}
else
{
Obter a Contagem de Diapositivos Visíveis
Se tiver solicitado que o código limitasse o valor devolvido para incluir apenas diapositivos visíveis, o código tem de filtrar a respetiva coleção de diapositivos para incluir apenas os diapositivos que têm uma Show propriedade que contém um valor e o valor é true
. Se a Show
propriedade for nula, isso também indica que o diapositivo está visível. Esse é o motivo mais comum. O PowerPoint não define o valor desta propriedade, em geral, a menos que o diapositivo esteja oculto. A única forma de a Show
propriedade existir e ter um valor de true
seria se tivesse ocultado e, em seguida, desselecionado o diapositivo. O código seguinte utiliza a Where função com uma expressão lambda para fazer o trabalho.
// 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();
Código de exemplo
Segue-se o exemplo de código completo RetrieveNumberOfSlides
em C# e 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;
}