Как отформатировать ресурс для Sheets.Spreadsheets.batchUpdate (resource, spreadsheetId) для создания группы столбцов - PullRequest
0 голосов
/ 12 декабря 2018
  • Я пытаюсь создать группу столбцов.
  • Я включил Sheets API версии 4.
  • Я посмотрел ссылку в Sheets API
  • Использование дополнения кода IЯ получил этот код:

    function makeColumnGroup() { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName('Sheet21'); Sheets.Spreadsheets.batchUpdate({"range":[{dimension:"COLUMNS",startIndex:1,endIndex:3,sheetId:sh.getSheetId()}]},ss.getId()); }

Я прошел через несколько разных версий, но в настоящее время я получаю сообщение об ошибке:

Invalid JSON payload received. Unknown name "range": Cannot find field. (line 4, file "20181212")

Но в справочнике по API показано, что AddDimensionGroupRequest в формате JSON выглядит следующим образом:

{ "range": { object(DimensionRange) } }

выглядит DimensionRangeкак это:

{ "sheetId": number, "dimension": enum(Dimension), "startIndex": number, "endIndex": number }

Завершение кода предлагает формат следующим образом:

Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId)

, но я не могу подойтис волшебной формулой для выяснения формата для этого ресурса.Опыт прошлых лет предлагает такой формат с Drive API:

Drive.Files.update({"parents": [{"id": subFldr.getId()}]}, res.getId());

Но это не работает, если я использовал формат, предложенный Sheets API:

Sheets.Spreadsheets.batchUpdate({"range":{dimension:"COLUMNS",startIndex:1,endIndex:3,sheetId:sh.getSheetId()}},ss.getId());

Я получаю сообщение об ошибке:

Invalid JSON payload received. Unknown name "range": Cannot find field. (line 4, file "20181212")

Вопрос: Как мне отформатировать ресурс параметр

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Хотя я не уверен, полезно ли это для вас, в качестве другого метода вы также можете использовать методы для создания запросов с помощью Sheets of Advanced Google Service.Когда вы пытаетесь использовать Sheets of Advanced Google Service в редакторе скриптов, вы можете увидеть некоторые методы при автозаполнении.Когда такие методы используются, требуемые параметры можно узнать по автозаполнению с помощью редактора сценариев.Поэтому я думаю, что это позволит нам легко создавать запросы.Например, тело запроса в вашем ответе может быть создано следующим образом.

Пример сценария:

function makeColumnGroup() {
  var ss=SpreadsheetApp.getActive();

  // Set parameters of addDimensionGroup
  var p = Sheets.newAddDimensionGroupRequest();
  p.range = Sheets.newGridRange();
  p.range.dimension = "COLUMNS";
  p.range.startIndex = 1;
  p.range.endIndex = 3;
  p.range.sheetId = ss.getSheetId();

  // Create single request
  var req = Sheets.newRequest();
  req.addDimensionGroup = p;

  // Create batch requests
  var batchReq = Sheets.newBatchUpdateSpreadsheetRequest();
  batchReq.requests = [req];

  // Request
  Sheets.Spreadsheets.batchUpdate(batchReq, ss.getId());
}

Примечание:

  • Когда batchReqПодтверждено, установлено, что оно совпадает с вашим телом запроса.
  • К сожалению, я не смог найти официальные документы, связанные с этими методами.Я подумал, что это может предполагать, что пользователи находят методы по автозаполнению.

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

Например, когда создается группа, чтобы свернуть группу, какоб этом примере сценария?В этом примере сценария создаются запросы addDimensionGroup и updateDimensionGroup.Эти запросы выполняются batchUpdate.

Пример сценария:

function makeColumnGroup() {
  var ss=SpreadsheetApp.getActive();

  // Set range
  var range = Sheets.newGridRange();
  range.dimension = "COLUMNS";
  range.startIndex = 1;
  range.endIndex = 3;
  range.sheetId = ss.getSheetId();

  // Create request of addDimensionGroup
  var p1 = Sheets.newAddDimensionGroupRequest();
  p1.range = range;
  var req1 = Sheets.newRequest();
  req1.addDimensionGroup = p1;

  // Create request of updateDimensionGroup
  var p2 = Sheets.newUpdateDimensionGroupRequest();
  p2.dimensionGroup = Sheets.newDimensionGroup();
  p2.dimensionGroup.collapsed = true;
  p2.dimensionGroup.depth = 1;
  p2.dimensionGroup.range = range;
  p2.fields = "*";
  var req2 = Sheets.newRequest();
  req2.updateDimensionGroup = p2;

  // Create batch requests
  var batchReq = Sheets.newBatchUpdateSpreadsheetRequest();
  batchReq.requests = [req1, req2];

  // Request
  Sheets.Spreadsheets.batchUpdate(batchReq, ss.getId());
}
0 голосов
/ 12 декабря 2018

Ого, я понял это.Вот код:

function makeColumnGroup() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet21');
  var res={
  "requests": [
    {
      "addDimensionGroup": {
        "range": {
          "dimension": "COLUMNS",
          "startIndex": 1,
          "endIndex": 3,
          "sheetId": 1163414414
        }
      }
    }
  ]
}
  Sheets.Spreadsheets.batchUpdate(res,ss.getId());

}

Он просто сводился к копированию кода прямо из API Explorer.Я постараюсь запомнить это в будущем.Я оставлю это без внимания, если у одного из более знающих добровольцев будет лучшее решение.

enter image description here

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