Использование Google Slides API позволяет использовать ответ от одного запроса во всех или любых оставшихся запросах во время одного и того же пакетного обновления. - PullRequest
1 голос
/ 19 февраля 2020

Я создал этот код, который создает таблицу Google Slides из электронной таблицы. Но так как я должен был иметь tableObjectId, я сделал это в двух пакетных обновлениях. Поэтому мне интересно, возможно ли получить resp1.replies [0] .creatTable.objectId из первого запроса, который создает таблицу, в запросы на загрузку ячеек в одном пакетном обновлении.

Код:

function putTablesIntoSlides() {
  var pr=SlidesApp.openById('Presentation Id');
  var slide1_ObjectId=pr.getSlides()[1].getObjectId();
  Logger.log(slide1_ObjectId);
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet10');
  var rg=sh.getDataRange();
  var v=rg.getValues();

  //Create Table
  var request1={"createTable": {"elementProperties":{"pageObjectId": slide1_ObjectId},"rows": v.length,"columns": v[0].length}};
  var resp1=Slides.Presentations.batchUpdate({requests:request1}, pr.getId());

  //Preparing the request for Adding Text into cells
  var request2=[];
  for(var i=0;i<v.length;i++) {
    for(var j=0;j<v[i].length;j++) {

      //Is there a way to get the replies[0].createTable.objectId from the create table request in the same batch update.
      request2.push({"insertText":{"objectId":resp1.replies[0].createTable.objectId,"cellLocation": {"rowIndex":i,"columnIndex":j},"text": v[i][j].toString()}});
    }
  }

  //Adding text
  var resp2=Slides.Presentations.batchUpdate({requests:request2}, pr.getId());   
}

Другими словами, возможно ли использовать ответ от одного запроса в любом или во всех оставшихся запросах во время одного обновления пакета.

1 Ответ

1 голос
/ 19 февраля 2020
  • Вы хотите запустить метод batchUpdate Slides API следующих запросов одним вызовом API.
    1. Создание новой таблицы.
    2. Ввод значений.
  • Вы хотите добиться этого с помощью Google Apps Script.

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

Точки модификации:

  • В этом случае, когда создается новая таблица, идентификатор объекта создаваемой таблицы может быть установлен на тело запроса.
  • Используя идентификатор объекта, значения можно поместить в таблицу.
  • Официальный документ гласит следующее.

    objectId : предоставленный пользователем идентификатор объекта для указанного выше заполнителя, который будет создан на слайде. Если вы укажете идентификатор, он должен быть уникальным среди всех страниц и элементов страницы в презентации. Идентификатор должен начинаться с буквы алфавита c или символа подчеркивания (соответствует регулярному выражению [a-zA-Z0-9_]); оставшиеся символы могут включать в себя как символы, так и дефис или двоеточие (соответствует регулярному выражению [a-zA-Z0-9_-:]). Длина идентификатора не должна быть меньше 5 или больше 50. Если вы не укажете идентификатор, будет создан уникальный.

Когда указанные выше точки отраженный в вашем сценарии, он становится следующим:

измененный сценарий:

с:
//Create Table
var request1={"createTable": {"elementProperties":{"pageObjectId": slide1_ObjectId},"rows": v.length,"columns": v[0].length}};
var resp1=Slides.Presentations.batchUpdate({requests:request1}, pr.getId());

//Preparing the request for Adding Text into cells
var request2=[];
for(var i=0;i<v.length;i++) {
  for(var j=0;j<v[i].length;j++) {

    //Is there a way to get the replies[0].createTable.objectId from the create table request in the same batch update.
    request2.push({"insertText":{"objectId":resp1.replies[0].createTable.objectId,"cellLocation": {"rowIndex":i,"columnIndex":j},"text": v[i][j].toString()}});
  }
}
//Adding text
var resp2=Slides.Presentations.batchUpdate({requests:request2}, pr.getId());
до:
var tableObjectId = "sampleId1";  // Here, the object ID of table is set.

//Create Table
var requests = [{"createTable": {"objectId": tableObjectId, "elementProperties":{"pageObjectId": slide1_ObjectId},"rows": v.length,"columns": v[0].length}}];

//Preparing the request for Adding Text into cells
for(var i=0;i<v.length;i++) {
  for(var j=0;j<v[i].length;j++) {

    //Is there a way to get the replies[0].createTable.objectId from the create table request in the same batch update.
    requests.push({"insertText":{"objectId":tableObjectId,"cellLocation": {"rowIndex":i,"columnIndex":j},"text": v[i][j].toString()}});
  }
}
//Adding text
var resp = Slides.Presentations.batchUpdate({requests:requests}, pr.getId());
  • В этом случае в качестве идентификатора образца объекта, var tableObjectId = "sampleId1" используется.

Ссылка:

Если я неправильно понял ваш вопрос, и это не было Направление вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...