Как добавить новый слайд с определенным новым макетом в Google Slides с помощью Google Script?

Это мой первый раз, когда я использую Stackru, и я попытался провести тщательное исследование, прежде чем публиковать этот вопрос. Я также новичок в программировании.

Вот что я сделал:

  1. Создал новую презентацию в Google Slides,
  2. Отредактировал один из предопределенных макетов в представлении Master Layout, чтобы получить новый макет, который я хочу использовать,
  3. Отредактировал название мастер-макета до "Встреча",

  4. Отредактировано имя предопределенного макета, который я хочу использовать в "Офис".

Моя проблема в том, что в Google Script я не могу ссылаться на этот конкретный предопределенный макет, который я хочу использовать.

Пока что мой код выглядит следующим образом:

function AddSlideToPresentatio() {

// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');

//Now, I try to use my new layout
  presentation.appendSlide("Office");
}

Я понятия не имею, почему это не работает. Когда я пытаюсь запустить его, я получаю сообщение об ошибке "Не удается найти метод appendSlide(строка). (Строка 6, файл" Офис ").

Ниже приведены некоторые комбинации, которые я пробовал, и они вызывают у меня похожие ошибки:

presentation.appendSlide('Office');
presentation.appendSlide(Office);
presentation.appendSlide("Meeting - Office");
presentation.appendSlide('Meeting - Office');
presentation.appendSlide(Meeting - Office);

Если я просто использую presentation.appendSlide(), он создает новый слайд, но не с макетом, который я хочу использовать.

В Справочнике по скриптам Google Apps есть три метода:

  1. appendSlide(),
  2. appendSlide(компоновка),
  3. appendSlide(predefinedLayout)

Однако я не могу понять, в чем разница между этими двумя последними, потому что, когда я пытаюсь использовать их, они, кажется, делают то же самое.

2 ответа

Вы передаете имя объекта макета для метода appendSlide, но вы должны передать LayoutObject параметр.

appendSlide (LayoutObject)

// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');
// this will return an array of all the layouts
var layouts = presentation.getLayouts();

//if your first array item is the office layout
var newSlide = presentation.appendSlide(layouts[0]);

//Orelse you can search for your layout
var selectedLayout;
for(var item in layouts)
{
   //Logger.log(layouts[item].getLayoutName());
   if(layouts[item].getLayoutName() =='CUSTOM_1')
   {
     selectedLayout = layouts[item];
   }
}
var newSlide = presentation.appendSlide(selectedLayout);

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

используйте их, как показано ниже;

presentation.appendSlide(SlidesApp.PredefinedLayout.SECTION_TITLE_AND_DESCRIPTION);

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Если вы хотите, чтобы отображаемое имя макета "Офис" и "Собрание" соответствовало объекту макета, вы можете использовать следующие 2 шаблона.

  1. Добавить макет с помощью идентификаторов слайдов.
  2. Добавить макет, используя слайд-объекты.

Чтобы использовать эти примеры сценариев, пожалуйста, включите Slides API в Advanced Google Services и консоли API.

Шаблон 1: Добавить макет с использованием идентификаторов слайдов

var displayName = "Office"; // Office or Meeting you gave

var presentationId = SlidesApp.getActivePresentation().getId();
var layouts = Slides.Presentations.get(presentationId).layouts;
var layout = {};
for (i in layouts) {
  layout[layouts[i].layoutProperties.displayName] = layouts[i].objectId;
}
var resource = {"requests": [{"createSlide": {"slideLayoutReference": {"layoutId": layout[displayName]}}}]};
Slides.Presentations.batchUpdate(resource, presentationId);

Шаблон 2: Добавить макет с использованием слайдов

Есть 2 имени для макета. Это "displayName", которое можно увидеть в браузере, и "name", которое получает getLayoutName()соответственно. Я думал, что ваши имена макетов "Office" и "Meeting" могут быть "displayName". Я не смог найти "displayName" используя SlidesApp, Поэтому я всегда получаю "displayName" с помощью Slides API следующим образом.

var displayName = "Office"; // Office or Meeting you gave

var s = SlidesApp.getActivePresentation();
var layouts = Slides.Presentations.get(s.getId()).layouts;
var layout = {};
for (i in layouts) {
  layout[layouts[i].layoutProperties.displayName] = layouts[i].layoutProperties.name;
}
var layoutObj = s.getLayouts().filter(function(e){return e.getLayoutName() == layout[displayName]})[0];
s.appendSlide(layoutObj);

Рекомендации:

Если это не было полезно для вас, извините.

Редактировать:

  • Q1. О пакетном обновлении
    • A1. Это используется для обновления слайдов с помощью Slides API. Вы можете увидеть подробную информацию здесь. Перед SlidesApp опубликовано, пользователи использовали Slides API, используя Advanced Google Services. Даже после SlidesApp было опубликовано несколько работ, которые может сделать только это. Поэтому я использую это.
  • Q2. Около var layout = {}
    • A2. Это используется для импорта данных словаря, созданных в цикле for.
  • Q3. Около filter()
    • A3. Об этом вы можете посмотреть документ здесь. Вы можете увидеть некоторые примеры сценариев там.
Другие вопросы по тегам