Complementos de PowerPointPowerPoint add-ins

Puede utilizar complementos de PowerPoint para crear soluciones atractivas para las presentaciones de los usuarios en plataformas como Windows, iPad, Mac y en un explorador.You can use PowerPoint add-ins to build engaging solutions for your users' presentations across platforms including Windows, iOS, Mac, and in a browser. Puede crear dos tipos de complementos de PowerPoint:You can create two types of PowerPoint add-ins:

  • Utilice complementos de contenido para agregar contenido dinámico de HTML5 a sus presentaciones. Por ejemplo, consulte el complemento de diagramas LucidChart para PowerPoint, que puede utilizar para insertar un diagrama interactivo de LucidChart en la baraja.Use content add-ins to add dynamic HTML5 content to your presentations. For example, see the LucidChart Diagrams for PowerPoint add-in, which you can use to inject an interactive diagram from LucidChart into your deck.

  • Utilice los complementos del panel de tareas para introducir información de referencia o insertar datos en la presentación mediante un servicio.Use task pane add-ins to bring in reference information or insert data into the presentation via a service. Por ejemplo, consulte el complemento Personajes Pixton Comic, que puede utilizar para agregar fotos profesionales a su presentación.For example, see the Pixton Comic Characters add-in, which you can use to add professional photos to your presentation.

Escenarios de complementos de PowerPointPowerPoint add-in scenarios

Los ejemplos de código del artículo muestran algunas tareas básicas para desarrollar complementos para PowerPoint.The code examples in this article demonstrate some basic tasks for developing add-ins for PowerPoint. Tenga en cuenta lo siguiente:Please note the following:

  • Para mostrar información, estos ejemplos usan la función app.showNotification, que se incluye en las plantillas de proyecto de los complementos de Office de Visual Studio.To display information, these examples use the app.showNotification function, which is included in the Visual Studio Office Add-ins project templates. Si no utiliza Visual Studio para desarrollar su complemento, deberá reemplazar la función showNotification con su propio código.If you aren't using Visual Studio to develop your add-in, you'll need replace the showNotification function with your own code.

  • Algunos de estos ejemplos también usan un objeto Globals que se declara fuera del ámbito de estas funciones como: var Globals = {activeViewHandler:0, firstSlideId:0};Several of these examples also use a Globals object that is declared beyond the scope of these functions as: var Globals = {activeViewHandler:0, firstSlideId:0};

  • Para usar estos ejemplos, el proyecto de complemento debe hacer referencia a la biblioteca de Office.js versión 1.1 o posterior.To use these examples, your add-in project must reference Office.js v1.1 library or later.

Detecte la vista activa de la presentación y maneje el evento ActiveViewChangedDetect the presentation's active view and handle the ActiveViewChanged event

Si va a crear un complemento de contenido, tendrá que obtener la vista activa de la presentación y manejar el evento ActiveViewChanged, como parte de su controlador Office.Initialize.If you are building a content add-in, you will need to get the presentation's active view and handle the ActiveViewChanged event, as part of your Office.Initialize handler.

Nota

En PowerPoint en la Web, el evento Document.ActiveViewChanged no se iniciará nunca, ya que el modo Presentación con diapositivas se trata como una nueva sesión.In PowerPoint on the web, the Document.ActiveViewChanged event will never fire as Slide Show mode is treated as a new session. En este caso, el complemento debe capturar la vista activa en carga, como se muestra en el siguiente ejemplo de código.In this case, the add-in must fetch the active view on load, as shown in the following code sample.

En el siguiente ejemplo de código:In the following code sample:

  • La función getActiveFileView llama al método Document.getActiveViewAsync para que regrese independientemente de que la vista actual de la presentación sea de "editar" (cualquiera de las vistas en las que puede editar diapositivas, como Normal o Vista de esquema) o "lectura" ( Presentación de diapositivas o Vista de lectura).The getActiveFileView function calls the Document.getActiveViewAsync method to return whether the presentation's current view is "edit" (any of the views in which you can edit slides, such as Normal or Outline View) or "read" (Slide Show or Reading View).

  • La función registerActiveViewChanged llama al método addHandlerAsync para registrar un controlador para el evento Document.ActiveViewChanged.The registerActiveViewChanged function calls the addHandlerAsync method to register a handler for the Document.ActiveViewChanged event.

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

    //Gets whether the current view is edit or read.
    var 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);
            }
        });
}

En el ejemplo de código siguiente, la función getSelectedRange llama al método Document.getSelectedDataAsync para obtener el objeto JSON devuelto por asyncResult.value, que contiene una matriz denominada diapositivas.In the following code sample, the getSelectedRange function calls the Document.getSelectedDataAsync method to get the JSON object returned by asyncResult.value, which contains an array named slides. La matriz diapositivas contiene los identificadores, títulos e índices del rango seleccionado de diapositivas (o de la diapositiva actual, si no se seleccionan varias diapositivas).The slides array contains the ids, titles, and indexes of selected range of slides (or of the current slide, if multiple slides are not selected). También guarda el Id. de la primera diapositiva del rango seleccionado a una variable global.It also saves the id of the first slide in the selected range to a global variable.

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

En el ejemplo de código siguiente, la función goToFirstSlide llamada al método Document.goToByIdAsync para ir a la primera diapositiva identificada por la función getSelectedRange mostrada anteriormente.In the following code sample, the goToFirstSlide function calls the Document.goToByIdAsync method to navigate to the first slide that was identified by the getSelectedRange function shown previously.

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");
        }
    });
}

En el siguiente ejemplo de código, la función goToSlideByIndex llama al método Document.goToByIdAsync para navegar hasta la siguiente diapositiva en la presentación.In the following code sample, the goToSlideByIndex function calls the Document.goToByIdAsync method to navigate to the next slide in the presentation.

function goToSlideByIndex() {
    var goToFirst = Office.Index.First;
    var goToLast = Office.Index.Last;
    var goToPrevious = Office.Index.Previous;
    var 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");
        }
    });
}

Obtenga la dirección URL de la presentaciónGet the URL of the presentation

En el siguiente ejemplo de código, la función getFileUrl llama al método Document.getFileProperties para obtener la dirección URL del archivo de presentación.In the following code sample, the getFileUrl function calls the Document.getFileProperties method to get the URL of the presentation file.

function getFileUrl() {
    //Get the URL of the current file.
    Office.context.document.getFilePropertiesAsync(function (asyncResult) {
        var 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);
        }
    });
}

Crear una presentaciónCreate a presentation

El complemento puede crear una nueva presentación, independiente de la instancia de PowerPoint en la que el complemento se está ejecutando actualmente.Your add-in can create a new presentation, separate from the PowerPoint instance in which the add-in is currently running. El espacio de nombres de PowerPoint tiene el método createPresentation para este propósito.The PowerPoint namespace has the createPresentation method for this purpose. Cuando se llama a este método, la nueva presentación se abre inmediatamente y se muestra en una nueva instancia de PowerPoint.When this method is called, the new presentation is immediately opened and displayed in a new instance of PowerPoint. El complemento permanece abierto y en ejecución con la presentación anterior.Your add-in remains open and running with the previous presentation.

PowerPoint.createPresentation();

El método createPresentation también puede crear una copia de una presentación existente.The createPresentation method can also create a copy of an existing presentation. El método acepta una representación de cadena con codificación base64 de un archivo .pptx como un parámetro opcional.The method accepts a base64-encoded string representation of an .pptx file as an optional parameter. La presentación resultante será una copia de ese archivo, si el argumento de la cadena es un archivo .pptx válido.The resulting presentation will be a copy of that file, assuming the string argument is a valid .pptx file. La clase FileReader puede usarse para convertir un archivo en la cadena con codificación base64 necesaria, como se muestra en el ejemplo siguiente.The FileReader class can be used to convert a file into the required base64-encoded string, as demonstrated in the following example.

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

reader.onload = function (event) {
    // strip off the metadata before the base64-encoded string
    var startIndex = reader.result.toString().indexOf("base64,");
    var 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]);

Vea tambiénSee also