Ajouter et supprimer des diapositives dans PowerPoint

Un complément PowerPoint peut ajouter des diapositives à la présentation et éventuellement spécifier le masque et la disposition du masque utilisé pour la nouvelle diapositive. Le complément peut également supprimer des diapositives.

Les API permettant d’ajouter des diapositives sont principalement utilisées dans les scénarios où les ID des masque des diapositives et des dispositions de la présentation sont connus au moment du codage ou se trouvent dans une source de données au moment de l’exécution. Dans un tel scénario, vous ou le client devez créer et gérer une source de données qui met en corrélation le critère de sélection (par exemple, les noms ou les images des masques et des dispositions des diapositives) avec les ID des masques et des dispositions des diapositives. Les API peuvent également être utilisées dans les scénarios où l’utilisateur peut insérer des diapositives qui utilisent le masque des diapositives par défaut et la disposition par défaut du masque, et dans les scénarios où l’utilisateur peut sélectionner une diapositive existante et en créer une nouvelle avec le même masque des diapositives et la même disposition (mais pas le même contenu). Pour plus d’informations à ce sujet, consultez Sélection du masque des diapositives et de la disposition à utiliser .

Ajouter une diapositive avec SlideCollection.add

Ajoutez des diapositives avec la méthode SlideCollection.add . Voici un exemple simple dans lequel une diapositive qui utilise le masque des diapositives par défaut de la présentation et la première disposition de ce masque sont ajoutés. La méthode ajoute toujours de nouvelles diapositives à la fin de la présentation. Voici un exemple.

async function addSlide() {
  await PowerPoint.run(async function(context) {
    context.presentation.slides.add();

    await context.sync();
  });
}

Sélectionner le masque des diapositives et la disposition à utiliser

Utilisez le paramètre AddSlideOptions pour contrôler le masque des diapositives utilisé pour la nouvelle diapositive et la disposition utilisée dans la forme de base. Voici un exemple. Tenez compte du code suivant :

  • Vous pouvez inclure l’une ou les deux propriétés de l’objet AddSlideOptions .
  • Si les deux propriétés sont utilisées, la disposition spécifiée doit appartenir au maître spécifié, sinon une erreur est générée.
  • Si la masterId propriété n’est pas présente (ou si sa valeur est une chaîne vide), le masque des diapositives par défaut est utilisé et doit layoutId être une disposition de ce masque des diapositives.
  • Le masque des diapositives par défaut est le masque des diapositives utilisé par la dernière diapositive de la présentation. (Dans le cas inhabituel où il n’y a actuellement aucune diapositive dans la présentation, le masque des diapositives par défaut est le premier masque des diapositives de la présentation.)
  • Si la layoutId propriété n’est pas présente (ou si sa valeur est une chaîne vide), la première disposition de la forme de base spécifiée par est masterId utilisée.
  • Les deux propriétés sont des chaînes d’une des trois formes possibles : nnnnnnnnnn,##mmmmmmm ou nnnnnnnnnnnn#mmmmmmmmmmm, où nnnnnnnnnn est l’ID de la forme de base ou de la disposition (généralement 10 chiffres) et mmmmmmmmmmm est l’ID de création de la forme de base ou de la disposition (généralement de 6 à 10 chiffres). En voici quelques exemples : 2147483690#2908289500, 2147483690#et #2908289500.
async function addSlide() {
    await PowerPoint.run(async function(context) {
        context.presentation.slides.add({
            slideMasterId: "2147483690#2908289500",
            layoutId: "2147483691#2499880"
        });
    
        await context.sync();
    });
}

Il n’existe aucun moyen pratique permettant aux utilisateurs de découvrir l’ID ou l’ID de création d’un masque des diapositives ou d’une disposition. Pour cette raison, vous pouvez utiliser le AddSlideOptions paramètre uniquement lorsque vous connaissez les ID au moment du codage ou que votre complément peut les découvrir au moment de l’exécution. Étant donné qu’on ne peut pas s’attendre à ce que les utilisateurs mémorisent les ID, vous avez également besoin d’un moyen de permettre à l’utilisateur de sélectionner des diapositives, par nom ou par image, puis de mettre en corrélation chaque titre ou image avec l’ID de la diapositive.

Par conséquent, le AddSlideOptions paramètre est principalement utilisé dans les scénarios dans lesquels le complément est conçu pour fonctionner avec un ensemble spécifique de masques de diapositives et de dispositions dont les ID sont connus. Dans un tel scénario, vous ou le client devez créer et gérer une source de données qui met en corrélation un critère de sélection (tel que le masque des diapositives et les noms de disposition ou les images) avec les ID ou ID de création correspondants.

Laisser l’utilisateur choisir une diapositive correspondante

Si votre complément peut être utilisé dans des scénarios où la nouvelle diapositive doit utiliser la même combinaison de masque des diapositives et de disposition que celle utilisée par une diapositive existante , votre complément peut (1) inviter l’utilisateur à sélectionner une diapositive et (2) lire les ID du masque et de la disposition des diapositives. Les étapes suivantes montrent comment lire les ID et ajouter une diapositive avec une forme de base et une disposition correspondantes.

  1. Créez une fonction pour obtenir l’index de la diapositive sélectionnée. Voici un exemple. Tenez compte du code suivant :

    • Il utilise la méthode Office.context.document.getSelectedDataAsync des API JavaScript courantes.
    • L’appel à getSelectedDataAsync est incorporé dans une fonction de retour de promesse. Pour plus d’informations sur la raison et la façon de procéder, consultez Wrapper les API courantes dans les fonctions de retour de promesse.
    • getSelectedDataAsync retourne un tableau, car plusieurs diapositives peuvent être sélectionnées. Dans ce scénario, l’utilisateur n’en a sélectionné qu’une seule, de sorte que le code obtient la première (0e) diapositive, qui est la seule sélectionnée.
    • La index valeur de la diapositive est la valeur de base 1 que l’utilisateur voit en regard de la diapositive dans le volet Miniatures.
    function getSelectedSlideIndex() {
        return new OfficeExtension.Promise<number>(function(resolve, reject) {
            Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function(asyncResult) {
                try {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        reject(console.error(asyncResult.error.message));
                    } else {
                        resolve(asyncResult.value.slides[0].index);
                    }
                } 
                catch (error) {
                    reject(console.log(error));
                }
            });
        });
    }
    
  2. Appelez votre nouvelle fonction à l’intérieur de PowerPoint.run() de la fonction main qui ajoute la diapositive. Voici un exemple.

    async function addSlideWithMatchingLayout() {
        await PowerPoint.run(async function(context) {
    
            let selectedSlideIndex = await getSelectedSlideIndex();
    
            // Decrement the index because the value returned by getSelectedSlideIndex()
            // is 1-based, but SlideCollection.getItemAt() is 0-based.
            const realSlideIndex = selectedSlideIndex - 1;
            const selectedSlide = context.presentation.slides.getItemAt(realSlideIndex).load("slideMaster/id, layout/id");
    
            await context.sync();
    
            context.presentation.slides.add({
                slideMasterId: selectedSlide.slideMaster.id,
                layoutId: selectedSlide.layout.id
            });
    
            await context.sync();
        });
    }
    

Supprimer des diapositives

Supprimez une diapositive en obtenant une référence à l’objet Slide qui représente la diapositive et appelez la Slide.delete méthode . Voici un exemple dans lequel la 4e diapositive est supprimée.

async function deleteSlide() {
    await PowerPoint.run(async function(context) {

        // The slide index is zero-based. 
        const slide = context.presentation.slides.getItemAt(3);
        slide.delete();

        await context.sync();
    });
}