Добавление и удаление слайдов в PowerPoint

Надстройка PowerPoint может добавлять слайды в презентацию и при необходимости указывать, какой образец слайдов и какой макет образца используется для нового слайда. Надстройка также может удалять слайды.

API-интерфейсы для добавления слайдов в основном используются в сценариях, когда идентификаторы образов слайдов и макетов в презентации известны во время написания кода или находятся в источнике данных во время выполнения. В таком сценарии вы или клиент должны создать и поддерживать источник данных, который сопоставляет критерий выбора (например, имена или изображения образцов слайдов и макетов) с идентификаторами образов слайдов и макетов. API-интерфейсы также можно использовать в сценариях, когда пользователь может вставлять слайды, использующие образец слайдов по умолчанию и макет образца по умолчанию, а также в сценариях, когда пользователь может выбрать существующий слайд и создать новый с тем же образцом слайдов и макетом (но не с тем же содержимым). Дополнительные сведения см. в статье Выбор образца слайдов и макета для использования .

Добавление слайда с помощью SlideCollection.add

Добавьте слайды с помощью метода SlideCollection.add . Ниже приведен простой пример, в котором добавляется слайд, использующий образец слайдов по умолчанию презентации и первый макет этого образца. Метод всегда добавляет новые слайды в конец презентации. Ниже приведен пример.

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

    await context.sync();
  });
}

Выбор образца слайдов и макета для использования

Используйте параметр AddSlideOptions , чтобы указать, какой образец слайдов используется для нового слайда и какой макет используется в образце. Ниже приведен пример. Вот что нужно знать об этом коде:

  • Можно включить одно или оба свойства AddSlideOptions объекта.
  • Если используются оба свойства, указанный макет должен принадлежать указанному главному элементу или возникает ошибка.
  • masterId Если свойство отсутствует (или его значение является пустой строкой), то используется образец слайдов по умолчанию, и layoutId должен быть макетом этого образца слайдов.
  • Образец слайдов по умолчанию — это образец слайдов, используемый последним слайдом в презентации. (В необычном случае, когда в презентации в настоящее время нет слайдов, образец слайдов по умолчанию является первым образцом слайдов в презентации.)
  • layoutId Если свойство отсутствует (или его значение является пустой строкой), то используется первый макет главного элемента , указанный в masterId .
  • Оба свойства представляют собой строки одной из трех возможных форм: nnnnnnnnnnnn#, #mmmmmmmmm или nnnnnnnnnnmmmmmmm#, где nnnnnnnnnn — это идентификатор главного элемента или макета (обычно 10 цифр), а mmmmmmmmm — идентификатор создания образца или макета (обычно от 6 до 10 цифр). Некоторые примеры: 2147483690#2908289500, 2147483690#и #2908289500.
async function addSlide() {
    await PowerPoint.run(async function(context) {
        context.presentation.slides.add({
            slideMasterId: "2147483690#2908289500",
            layoutId: "2147483691#2499880"
        });
    
        await context.sync();
    });
}

Практически невозможно обнаружить идентификатор или идентификатор создания образца слайдов или макета. По этой причине параметр можно использовать AddSlideOptions только в том случае, если вы знаете идентификаторы во время написания кода или надстройка может обнаружить их во время выполнения. Так как нельзя ожидать, что пользователи запоминают идентификаторы, вам также потребуется способ, позволяющий пользователю выбирать слайды, например по имени или по изображению, а затем сопоставлять каждое название или изображение с идентификатором слайда.

Соответственно, параметр в основном используется в сценариях, AddSlideOptions в которых надстройка предназначена для работы с определенным набором образов слайдов и макетов, идентификаторы которых известны. В таком сценарии вы или клиент должны создать и обслуживать источник данных, который сопоставляет критерий выбора (например, имена образца слайдов и макетов или изображения) с соответствующими идентификаторами или идентификаторами создания.

Заставьте пользователя выбрать соответствующий слайд

Если надстройка может использоваться в сценариях, в которых новый слайд должен использовать то же сочетание образца слайдов и макета, которое используется существующим слайдом, ваша надстройка может (1) предложить пользователю выбрать слайд и (2) прочитать идентификаторы образца слайда и макета. Ниже показано, как считывать идентификаторы и добавлять слайд с соответствующим образцом и макетом.

  1. Создайте функцию, чтобы получить индекс выбранного слайда. Ниже приведен пример. Вот что нужно знать об этом коде:

    • Он использует метод Office.context.document.getSelectedDataAsync общих API JavaScript.
    • Вызов встраивается getSelectedDataAsync в функцию promise-returning. Дополнительные сведения о том, почему и как это сделать, см. в статье Перенос общих API в функции возврата обещаний.
    • getSelectedDataAsync возвращает массив, так как можно выбрать несколько слайдов. В этом сценарии пользователь выбрал только один, поэтому код получает первый (0-й) слайд, который является единственным выбранным.
    • Значение index слайда — это значение из 1, которое пользователь видит рядом со слайдом в области эскизов.
    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. Вызовите новую функцию внутри PowerPoint.run() основной функции, которая добавляет слайд. Ниже приведен пример.

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

Удаление слайдов

Удалите слайд, получив ссылку на объект Slide , представляющий слайд, и вызовите Slide.delete метод . Ниже приведен пример удаления 4-го слайда.

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