Share via


Recuperar el número de diapositivas en un documento de la presentación

En este tema se muestra cómo usar las clases del SDK de Open XML para Office para recuperar mediante programación el número de diapositivas de un documento de presentación, incluidas las diapositivas ocultas o no, sin cargar el documento en Microsoft PowerPoint. Incluye un método RetrieveNumberOfSlides de ejemplo para ilustrar esta tarea.


Método RetrieveNumberOfSlides

Puede usar el método RetrieveNumberOfSlides para obtener el número de diapositivas de un documento de presentación e incluir opcionalmente las diapositivas ocultas. El método RetrieveNumberOfSlides acepta dos parámetros: una cadena que indica la ruta de acceso del archivo que se desea examinar y un valor booleano opcional que indica si se deben incluir las diapositivas ocultas en el recuento.

    public static int RetrieveNumberOfSlides(string fileName, 
        bool includeHidden = true)

Llamar al método RetrieveNumberOfSlides

El método devuelve un número entero que indica el número de diapositivas, contándolas todas o solo las visibles, según el valor del segundo parámetro. Para llamar al método, transmita todos los valores de parámetro, tal como se muestra en el código siguiente.

    // Retrieve the number of slides, excluding the hidden slides.
    Console.WriteLine(RetrieveNumberOfSlides(DEMOPATH, false));
    // Retrieve the number of slides, including the hidden slides.
    Console.WriteLine(RetrieveNumberOfSlides(DEMOPATH));

Funcionamiento del código

El código comienza creando una variable de entero, slidesCount, para incluir el número de diapositivas. A continuación, el código abre la presentación especificada mediante el método PresentationDocument.Open e indica que el documento se debe abrir para acceso de solo lectura (el valor de parámetro false final). Dada la presentación abierta, el código usa la propiedad PresentationPart para navegar a la parte principal de la presentación y almacenar la referencia en una variable denominada presentationPart.

    using (PresentationDocument doc = 
        PresentationDocument.Open(fileName, false))
    {
        // Get the presentation part of the document.
        PresentationPart presentationPart = doc.PresentationPart;
        // Code removed here…
    }
    Return slidesCount;

Recuperar el recuento de todas las diapositivas

Si la referencia de la parte de presentación no es nula (y no lo será, para cualquier presentación válida que se cargue correctamente en PowerPoint), el código llama al método Count en el valor de la propiedad SlideParts de la parte de presentación. Si ha solicitado todas las diapositivas, incluidas las ocultas, no hay nada más que hacer. Resultaría más laborioso si se quisieran excluir las diapositivas ocultas, tal como se muestra en el código siguiente.

    if (includeHidden)
    {
        slidesCount = presentationPart.SlideParts.Count();
    }
    else
    {
        // Code removed here…
    }

Recuperar el recuento de diapositivas visibles

Si ha solicitado que el código limite el valor devuelto para incluir solo las diapositivas visibles, el código debe filtrar su colección de diapositivas para incluir solamente las que tengan una propiedad Show que contenga un valor, y el valor sea true. Si la propiedad Show es nula, eso también indica que la diapositiva es visible. Este es el escenario más probable: en general, PowerPoint no define el valor de esta propiedad, a menos que se deba ocultar la diapositiva. La única posibilidad de que la propiedad Show exista y tenga el valor true es si se ha ocultado la diapositiva y luego se la ha vuelto a hacer visible. El código siguiente usa la función Where** con una expresión lambda para realizar el trabajo.

    var slides = presentationPart.SlideParts.Where(
        (s) => (s.Slide != null) &&
          ((s.Slide.Show == null) || (s.Slide.Show.HasValue && 
          s.Slide.Show.Value)));
    slidesCount = slides.Count();

Código de ejemplo

A continuación se incluye el ejemplo de código RetrieveNumberOfSlides completo en C# y Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using System;
using System.Linq;

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.ToLower() == "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;
}

Vea también