Поделиться через


Надстройки PowerPoint

С помощью надстроек PowerPoint можно создавать удобные решения, подходящие для использования в презентациях на различных платформах, таких как Windows, iPad, Mac и браузеры. Можно создать два типа надстроек PowerPoint:

  • Контентные надстройки позволяют добавлять динамический контент HTML5 в презентации. Например, ознакомьтесь с надстройкой LucidChart Diagrams for PowerPoint, с помощью которой можно добавить интерактивные схемы LucidChart в набор слайдов. Чтобы создать собственную контентную надстройку, можно начать с создания первой контентной надстройки PowerPoint.

  • Надстройки области задач позволяют добавлять справочные сведения или данные в презентацию с помощью службы. Например, используя надстройку Pexels - Free Stock Photos, вы можете вставить профессиональные фотографии в свою презентацию. Чтобы создать собственную надстройку области задач, можно начать с создания первой надстройки области задач PowerPoint.

Сценарии надстроек PowerPoint

В приведенных в этой статье примерах кода показаны основные задачи по разработке надстроек для PowerPoint. Обратите внимание на следующее:

  • При отображении сведений эти примеры используют функцию app.showNotification, включенную в шаблоны проектов надстроек Office в Visual Studio. Если для разработки надстройки вы не используете Visual Studio, замените функцию showNotification собственным кодом.

  • В некоторых из этих примеров также используется объект, объявленный Globals за пределами область этих функций, как:

    let Globals = {activeViewHandler:0, firstSlideId:0};

  • Для использования этих примеров необходимо, чтобы проект надстройки ссылался на библиотеку Office.js 1.1 или более поздней версии.

Определение активного представления презентации и обработка события ActiveViewChanged

При создании контентной надстройки необходимо получить активное представление презентации и обработать ActiveViewChanged событие как часть обработчика Office.onReady .

Примечание.

В PowerPoint в Интернете не удастся запустить событие Document.ActiveViewChanged, поскольку режим показа слайдов обрабатывается как новый сеанс. В этом случае надстройке необходимо получить активное представление по загрузке, как показано в примере кода ниже.

Обратите внимание на следующее о примере кода:

  • Функция getActiveFileView вызывает метод Document.getActiveViewAsync , чтобы определить, является ли текущее представление презентации "edit" (любое из представлений, в которых можно редактировать слайды, например "Обычный " или "Режим структуры") или "Чтение" (слайд-шоу или режим чтения).

  • Функция registerActiveViewChanged вызывает метод addHandlerAsync для регистрации обработчика для события 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);
            }
        });
}

В следующем примере кода функция getSelectedRange вызывает метод Document.getSelectedDataAsync для получения объекта JSON, возвращаемого свойством asyncResult.value. Этот объект содержит массив с именем slides. Массив slides содержит идентификаторы, заголовки и индексы выбранного диапазона слайдов (или текущего слайда, если не выбрано несколько слайдов). Он также сохраняет идентификатор первого слайда в выбранном диапазоне в глобальную переменную.

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

В приведенном ниже примере кода функция goToFirstSlide вызывает метод Document.goToByIdAsync для перехода к первому слайду, который был определен показанной ранее функцией getSelectedRange.

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

В следующем примере кода функция goToSlideByIndex вызывает метод Document.goToByIdAsync для перехода к следующему слайду презентации.

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

Получение URL-адреса презентации

В следующем примере кода функция вызывает метод Document.getFileProperties, getFileUrl чтобы получить URL-адрес файла презентации.

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

Создание презентации

Ваша надстройка может создать новую презентацию, отдельную от экземпляра PowerPoint, в котором в настоящее время работает надстройка. Для этой цели в пространстве имен PowerPoint есть метод createPresentation. При вызове этого метода сразу открывается и отображается новая презентация в новом экземпляре программы PowerPoint. Ваша надстройка остается открытой и запущенной в предыдущей презентации.

PowerPoint.createPresentation();

С помощью метода createPresentation также можно создать копию существующей презентации. Метод принимает строковое представление файла .pptx в кодировке Base64 в качестве необязательного параметра. Полученная презентация будет копией этого файла, предполагая, что строковый аргумент является допустимым PPTX-файлом. Класс FileReader можно использовать для преобразования файла в требуемую строку в кодировке Base64, как показано в следующем примере.

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

См. также