如何格式化 Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId) 的资源以创建列组

How to format the resource for Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId) to create a column group

我已经经历了几个不同的版本,但就目前而言,我收到了错误:

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

但在 API 参考中显示 JSON 格式的 AddDimensionGroupRequest 如下所示:

{ "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());

但如果我使用表格建议的格式,这将不起作用 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")

问题: 如何格式化 resource 参数?

哦,哇,我想通了。这是代码:

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 资源管理器复制代码。以后我会尽量记住这一点。如果知识渊博的志愿者之一有更好的解决方案,我将不加检查。

虽然我不确定这是否对您有用,但作为另一种方法,您也可以使用使用 Sheets of Advanced Google 服务创建请求的方法。当您尝试在脚本编辑器上使用 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后,发现和你的request body一样
  • 很遗憾,我找不到与这些方法相关的官方文档。我认为它可能假设用户通过自动完成找到方法。

编辑:

比如在创建群的时候,为了折叠群,这个示例脚本怎么样?在此示例脚本中,它创建了 addDimensionGroupupdateDimensionGroup 的请求。这些请求来自 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());
}