Compartilhar via


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;
}

Confira também