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


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

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

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

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

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

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

    await context.sync();
  });
}

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

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

  • Можно включить одно или оба свойства AddSlideOptions объекта.
  • Если используются оба свойства, указанный макет должен принадлежать указанному master в противном случае возникает ошибка.
  • masterId Если свойство отсутствует (или его значение является пустой строкой), то используется master слайда по умолчанию, и layoutId должен быть макетом этого слайда master.
  • Master слайда по умолчанию — это master, используемый последним слайдом в презентации. (В необычном случае, когда в настоящее время в презентации нет слайдов, то master слайда по умолчанию является первым master слайда в презентации.)
  • layoutId Если свойство отсутствует (или его значение является пустой строкой), то используется первый макет master, указанный в masterId .
  • Оба свойства представляют собой строки одной из трех возможных форм: nnnnnnnnnnnn#, #mmmmmmmmm или nnnnnnnnnnmmmmmmm#, где nnnnnnnn — это идентификатор master или макета (обычно 10 цифр), а mmmmmmmmm — это идентификатор создания master или макета (обычно от 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();
    });
}

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

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

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

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

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