Создание нового запроса слайдов с помощью Google App Script и изменение созданного макета - PullRequest
0 голосов
/ 17 января 2019

Я создаю надстройку листа для печати тегов имен из списка Google Листов в документ Google Slides. Один слайд будет содержать имя тега и название компании. Я не могу вставить заголовок при создании слайда.

var dataRangeNotation = 'Customers!A2:M6';
var values = SpreadsheetApp.openById('').getRange(dataRangeNotation).getValues();
var presentationId = ''
var requests = []
// For each record, create a new merged presentation.
for (var i = 0; i < values.length; ++i) {
  var row = values[i];
  var customerName = row[0]; // name in column 1
  var customerCompany = row[1]; // company description in column 2
  var pageId = Utilities.getUuid();
  var bodyId = Utilities.getUuid();
  var titleID = Utilities.getUuid();

  requests.push({
    'createSlide': {
      'objectId': pageId,
      'insertionIndex': 0,
      'slideLayoutReference': {
        'predefinedLayout': 'TITLE'
      },
      "placeholderIdMappings": [
      {
        "layoutPlaceholder": {
          "type": "TITLE",
          "index": 0
        },
        "objectId": titleID,
       },
      {
        "layoutPlaceholder": {
          "type": "BODY",
          "index": 0
        },
        "objectId": bodyId,
       },
      ],
    },
        {
      "insertText": {
        "objectId": titleID,
        "text": "This is my slide title",
      },
        },

  });


},
  var slide =
      Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
  Logger.log('Created Slide with ID: ' + slide.replies[0].createSlide.objectId);

Макет placeholerIdMappings не работает. Я не хотел бы создавать слайды, а затем зацикливать слайды, чтобы изменить названия слайдов. Ищете способ вставить уже в запрос.

1 Ответ

0 голосов
/ 17 января 2019
var dataRangeNotation = 'Customers!A2:M6';
var values = SpreadsheetApp.openById('ss').getRange(dataRangeNotation).getValues();
var presentationId = 'xxx'
var requests = []
// For each record, create a new merged presentation.
for (var i = 0; i < values.length; ++i) { 
  var pageId = Utilities.getUuid();
  var bodyId = Utilities.getUuid();
  var subtitleID = Utilities.getUuid();
      requests.push(
        {
            "createSlide": {
              "objectId": pageId,
              "slideLayoutReference": {
                'predefinedLayout': 'TITLE'
              },  
            }
          });

}
  var slide =
      Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
  Logger.log('Created Slide with ID: ' + slide.replies[0].createSlide.objectId);
  var preso = SlidesApp.openById(presentationId);

  for (var i = 0; i < values.length; ++i) {
  var row = values[i];
  var customerName = row[0]; // name in column 1
  var customerCompany = row[1];// case description in column 2
  var [title, subtitle] = preso.getSlides()[i].getPageElements();
  title.asShape().getText().setText(customerName);
  subtitle.asShape().getText().setText(customerCompany);
  }

Этот цикл делает свое дело, но не подходит для больших обновлений из-за API-ограничений.

...