Partager via


Récupérer le nombre de diapositives dans un document de présentation

Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de récupérer par programmation le nombre de diapositives d’un document de présentation, y compris les diapositives masquées ou non, sans charger le document dans Microsoft PowerPoint. Elle contient un exemple de méthode RetrieveNumberOfSlides pour illustrer cette tâche.


Méthode RetrieveNumberOfSlides

Vous pouvez utiliser la méthode RetrieveNumberOfSlides pour obtenir le nombre de diapositives dans un document de présentation, en incluant facultativement les diapositives masquées. La méthode RetrieveNumberOfSlides accepte deux paramètres : une chaîne qui indique le chemin d'accès au fichier à examiner, et une valeur booléenne facultative qui précise s'il faut inclure les diapositives masquées dans le décompte.

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

Appel de la méthode RetrieveNumberOfSlides

La méthode renvoie un nombre entier qui indique le nombre de diapositives, comptant toutes les diapositives ou uniquement les diapositives visibles, selon la valeur du deuxième paramètre. Pour appeler la méthode, passez toutes les valeurs de paramètres, comme dans le code suivant.

    // 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));

Fonctionnement du code

Le code commence par créer une variable entière, slidesCount, pour contenir le nombre de diapositives. Il ouvre ensuite la présentation spécifiée en utilisant la méthode PresentationDocument.Open et en indiquant que le document doit être ouvert pour un accès en lecture seule (la valeur finale false du paramètre). Étant donné la présentation ouverte, le code utilise la propriété PresentationPart pour accéder à la partie de présentation main, en stockant la référence dans une variable nommée presentationPart.

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

Récupération du nombre de toutes les diapositives

Si la référence du composant de présentation n’est pas null (et qu’elle ne le sera pas pour toute présentation valide qui se charge correctement dans PowerPoint), le code appelle ensuite la méthode Count sur la valeur de la propriété SlideParts du composant de présentation. Si vous avez demandé toutes les diapositives, diapositives masquées incluses, c'est tout ce qu'il y a à faire. Il y a encore un peu de travail à faire si vous souhaitez exclure les diapositives masquées, comme l'illustre le code suivant.

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

Récupération du nombre de diapositives visibles

Si vous avez demandé que le code doit limiter la valeur renvoyée aux seules diapositives visibles, le code doit filtrer sa collection de diapositives pour inclure uniquement les diapositives ayant une propriété Show qui contient une valeur, et la valeur est true. Si la propriété Show contient la valeur Null, cela indique également que la diapositive est visible. C'est le scénario le plus probable, en effet PowerPoint ne définit généralement pas la valeur de cette propriété, sauf si la diapositive doit être masquée. La propriété Show ne peut exister et avoir la valeur true que si vous avez masqué la diapositive, puis annulé ce masquage. Le code suivant utilise la fonction Where** avec une expression lambda pour effectuer le travail.

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

Exemple de code

Voici l'exemple de code RetrieveNumberOfSlides complet en C# et 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;
}

Voir aussi