Compartir a través de


Complementos de PowerPoint

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. Puede crear dos tipos de complementos de PowerPoint:

Escenarios de complementos de PowerPoint

Los ejemplos de código del artículo muestran algunas tareas básicas para desarrollar complementos para PowerPoint. Tenga en cuenta lo siguiente:

  • 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. Si no utiliza Visual Studio para desarrollar su complemento, deberá reemplazar la función showNotification con su propio código.

  • Varios de estos ejemplos también usan un Globals objeto que se declara fuera del ámbito de estas funciones como:

    let 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.

Detecte la vista activa de la presentación y maneje el evento ActiveViewChanged

Si va a compilar un complemento de contenido, tendrá que obtener la vista activa de la presentación y controlar el ActiveViewChanged evento, como parte del Office.onReady controlador.

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. En este caso, el complemento debe capturar la vista activa en carga, como se muestra en el siguiente ejemplo de código.

Tenga en cuenta lo siguiente sobre el ejemplo de código:

  • La getActiveFileView función llama al método Document.getActiveViewAsync para devolver si la vista actual de la presentación es "edit" (cualquiera de las vistas en las que se pueden editar diapositivas, como Normal o Vista esquema) o "read" (Presentación con diapositivas o Vista de lectura).

  • La registerActiveViewChanged función llama al método addHandlerAsync para registrar un controlador para el evento Document.ActiveViewChanged .

// General Office.onReady function. Called after the add-in loads and Office JS is initialized.
Office.onReady(function() {
    // Get 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 === Office.AsyncResultStatus.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 === Office.AsyncResultStatus.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 slides. La slides matriz contiene los identificadores, títulos e índices del intervalo seleccionado de diapositivas (o de la diapositiva actual, si no se seleccionan varias diapositivas). También guarda el identificador de la primera diapositiva del intervalo seleccionado en una variable global.

function getSelectedRange() {
    // Gets 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 === Office.AsyncResultStatus.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.

function goToFirstSlide() {
    Office.context.document.goToByIdAsync(Globals.firstSlideId, Office.GoToType.Slide, function (asyncResult) {
        if (asyncResult.status === Office.AsyncResultStatus.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.

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 === Office.AsyncResultStatus.Failed) {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        } else {
            app.showNotification("Navigation successful");
        }
    });
}

Obtenga la dirección URL de la presentación

En el ejemplo de código siguiente, la getFileUrl función llama al método Document.getFileProperties para obtener la dirección URL del archivo de presentación.

function getFileUrl() {
    // Gets 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);
        }
    });
}

Crear una presentación

El complemento puede crear una nueva presentación, independiente de la instancia de PowerPoint en la que el complemento se está ejecutando actualmente. El espacio de nombres de PowerPoint tiene el método createPresentation para este propósito. Cuando se llama a este método, la nueva presentación se abre inmediatamente y se muestra en una nueva instancia de PowerPoint. El complemento permanece abierto y en ejecución con la presentación anterior.

PowerPoint.createPresentation();

El método createPresentation también puede crear una copia de una presentación existente. El método acepta una representación de cadena codificada en Base64 de un archivo .pptx como parámetro opcional. La presentación resultante será una copia de ese archivo, si el argumento de la cadena es un archivo .pptx válido. La clase FileReader se puede usar para convertir un archivo en la cadena con codificación Base64 necesaria, como se muestra en el ejemplo siguiente.

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

Recursos adicionales