Compléments PowerPoint

Vous pouvez utiliser des compléments PowerPoint afin de créer des solutions attrayantes pour les présentations de vos utilisateurs sur différentes plateformes, notamment Windows, iPad et Mac, ainsi que dans un navigateur. Vous pouvez créer deux types de commandes de complément PowerPoint:

  • Utilisez des compléments de contenu pour ajouter du contenu HTML5 dynamique à vos présentations. Par exemple, consultez le complément Diagrammes LucidChart pour PowerPoint, qui vous permet d’injecter un diagramme interactif de LucidChart dans votre support de présentation.

  • Utilisez des compléments de volet Office pour faire apparaître des informations de référence ou insérer des données dans la diapositive via un service. Par exemple, consultez le complément Stock Photos gratuit Pexels, qui vous permet d’ajouter des photos professionnelles à votre présentation.

Scénarios de complément PowerPoint

Les exemples de code figurant dans l’article vous présentent certaines tâches de base en matière de développement de compléments de contenu pour PowerPoint. Notez également ce qui suit:

  • Pour afficher des informations, ces exemples dépendent de la fonctionapp.showNotification, qui est incluse dans les modèles de projet de compléments Office Visual Studio. Si vous n’utilisez pas Visual Studio pour développer votre complément, vous devrez remplacer la fonctionshowNotificationpar votre propre code.

  • Plusieurs de ces exemples utilisent également un Globals objet qui est déclaré au-delà de l’étendue de ces fonctions comme suit : var Globals = {activeViewHandler:0, firstSlideId:0};

  • Pour utiliser ces exemples, votre projet complément doit référencer Office.js version 1.1 bibliothèque ou version ultérieure.

Détecter l’affichage actif de la présentation et gérer l’événement ActiveViewChanged

Si vous créez un complément de contenu, vous devrez obtenir la vue active de la présentation et gérerActiveViewChangedl’événement ActiveViewChanged dans le cadre de votreOffice.Initializegestionnaire.

Remarque

Dans PowerPoint sur le web, l’événement Document.ActiveViewChanged ne se déclenche jamais, car le mode Diaporama est considéré comme une nouvelle session. Dans ce cas, le complément doit extraire la vue active lors du chargement, comme indiqué ci-dessous.

Collez le code suivant:

  • La getActiveFileView fonction appelle la méthode Document.getActiveViewAsync pour indiquer si l’affichage actuel de la présentation est « modifier » (l’un des affichages dans lesquels vous pouvez modifier des diapositives, comme le mode Normal ou Plan) ou « lire » (diaporama ou lecture).

  • La registerActiveViewChanged fonction appelle la méthode addHandlerAsync pour inscrire un gestionnaire pour l’événement Document.ActiveViewChanged .

//general Office.initialize function. Fires on load of the add-in.
Office.initialize = function(){

    //Gets whether the current view is edit or read.
    const currentView = getActiveFileView();

    //register for the active view changed handler
    registerActiveViewChanged();

    //render the content based off of the currentView
    //....
}

function getActiveFileView()
{
    Office.context.document.getActiveViewAsync(function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification(asyncResult.value);
        }
    });

}

function registerActiveViewChanged() {
    Globals.activeViewHandler = function (args) {
        app.showNotification(JSON.stringify(args));
    }

    Office.context.document.addHandlerAsync(Office.EventType.ActiveViewChanged, Globals.activeViewHandler,
        function (asyncResult) {
            if (asyncResult.status == "failed") {
                app.showNotification("Action failed with error: " + asyncResult.error.message);
            }
            else {
                app.showNotification(asyncResult.status);
            }
        });
}

Dans l’exemple de code suivant, la fonctiongetSelectedRange appelle la méthodeDocument.getSelectedDataAsync pour obtenir l’objet JSON renvoyé parasyncResult.value, qui contient un tableau nommé slides. La matriceslidescontient les IDs, les titres et les indexes de plage sélectionnées de diapositives (ou de la diapositive active si plusieurs diapositives ne sont pas sélectionnées). Elle enregistre également l’id de la première diapositive dans la plage sélectionnée à une variable globale.

function getSelectedRange() {
    // Get the id, title, and index of the current slide (or selected slides) and store the first slide id */
    Globals.firstSlideId = 0;

    Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            Globals.firstSlideId = asyncResult.value.slides[0].id;
            app.showNotification(JSON.stringify(asyncResult.value));
        }
    });
}

Dans l’exemple de code suivant la fonctiongoToFirstSlideappelle la méthodeDocument.goToByIdAsyncpour accéder à la première diapositive qui a été identifiée par la fonctiongetSelectedRangeillustrée précédemment.

function goToFirstSlide() {
    Office.context.document.goToByIdAsync(Globals.firstSlideId, Office.GoToType.Slide, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification("Navigation successful");
        }
    });
}

Dans l’exemple de code suivant, la fonctiongoToSlideByIndex appelle la méthode Document.goToByIdAsync pour passer à la diapositive suivante dans la présentation.

function goToSlideByIndex() {
    const goToFirst = Office.Index.First;
    const goToLast = Office.Index.Last;
    const goToPrevious = Office.Index.Previous;
    const goToNext = Office.Index.Next;

    Office.context.document.goToByIdAsync(goToNext, Office.GoToType.Index, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification("Navigation successful");
        }
    });
}

Obtenir l’URL de la présentation

Dans l’exemple de code suivant, la getFileUrl fonction appelle la méthode Document.getFileProperties pour obtenir l’URL du fichier de présentation.

function getFileUrl() {
    //Get the URL of the current file.
    Office.context.document.getFilePropertiesAsync(function (asyncResult) {
        const fileUrl = asyncResult.value.url;
        if (fileUrl == "") {
            app.showNotification("The file hasn't been saved yet. Save the file and try again");
        }
        else {
            app.showNotification(fileUrl);
        }
    });
}

Créer une présentation

Votre complément peut créer un nouveau classeur, distinct de l’instance de PowerPoint dans laquelle le complément est en cours d’exécution. L’espace de noms PowerPoint a la createPresentation méthode à cet effet. Lorsque cette méthode est appelée, la nouvelle présentation est immédiatement ouverte et affichée dans une nouvelle instance de PowerPoint. Votre complément reste ouvert et en cours d’exécution avec la présentation précédente.

PowerPoint.createPresentation();

La createPresentation méthode peut également créer une copie d’une présentation existante. La méthode accepte comme un paramètre facultatif une représentation de chaîne codée en base 64 d’un fichier .pptx. La présentation résultante sera une copie de ce fichier, en supposant que l’argument de chaîne est un fichier .pptx valide. La catégorieFileReader peut être utilisée pour convertir un fichier dans la chaîne codée en base 64 requise, comme indiqué dans l’exemple suivant.

const myFile = document.getElementById("file");
const reader = new FileReader();

reader.onload = function (event) {
    // strip off the metadata before the base64-encoded string
    const startIndex = reader.result.toString().indexOf("base64,");
    const copyBase64 = reader.result.toString().substr(startIndex + 7);

    PowerPoint.createPresentation(copyBase64);
};

// read in the file as a data URL so we can parse the base64-encoded string
reader.readAsDataURL(myFile.files[0]);

Voir aussi