Compartir a través de


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. Contiene un método de ejemplo RetrieveNumberOfSlides para ilustrar esta tarea.


Método RetrieveNumberOfSlides

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

static int RetrieveNumberOfSlides(string fileName, string 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.

if (args is [{ } fileName, { } includeHidden])
{
    RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
    RetrieveNumberOfSlides(fileName2);
}

Funcionamiento del código

El código comienza creando una variable de entero, slidesCount, para contener el número de diapositivas. A continuación, el código abre la presentación especificada mediante el Open método e indica que el documento debe estar abierto para el acceso de solo lectura (el valor del parámetro final false ). Dada la presentación abierta, el código usa la PresentationPart propiedad para navegar a la parte principal de la presentación, almacenando la referencia en una variable denominada 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;

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 Count al método en el valor de la SlideParts propiedad 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.ToUpper() == "TRUE")
{
    slidesCount = presentationPart.SlideParts.Count();
}
else
{

Recuperar el recuento de diapositivas visibles

Si solicitó que el código limitara el valor devuelto para incluir solo diapositivas visibles, el código debe filtrar su colección de diapositivas para incluir solo las diapositivas que tienen una Show propiedad que contiene un valor y el valor es true. Si la Show propiedad es null, esto también indica que la diapositiva está visible. Este es el escenario más probable. PowerPoint no establece el valor de esta propiedad, en general, a menos que se oculte la diapositiva. La única manera en que la Show propiedad existiría y tendría un valor de true sería si se hubiera ocultado y, a continuación, se desenvoliría la diapositiva. El código siguiente usa la Where función con una expresión lambda para realizar el trabajo.

// 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 ejemplo

A continuación se muestra el ejemplo de código completo RetrieveNumberOfSlides en C# y 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;
}

Recursos adicionales