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

时间:2018-12-12 19:16:08

标签: google-apps-script google-sheets-api

  • 我正在尝试创建一个列组。
  • 我已启用Sheets API版本4。
  • 我已经查看了Sheets API
  • 中的参考
  • 使用代码完成功能,我想出了以下代码:

    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参考中,它表明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());

但是,如果我使用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 :(得分:0)

哦,我知道了。这是代码:

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

答案 1 :(得分:0)

尽管我不确定这是否对您有用,但作为另一种方法,您也可以使用这些方法通过高级Google服务表格创建请求。当您尝试在脚本编辑器上使用“高级Google服务表格”时,自动填充功能可能会显示一些方法。使用这种方法时,可以通过脚本编辑器的自动完成来知道所需的参数。因此,我认为这将使我们轻松创建请求。作为示例,可以像此示例一样创建答案中的请求正文。

示例脚本:

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后,发现它与您的请求正文相同。
  • 很遗憾,我找不到与这些方法有关的官方文件。我认为这可能是假设用户通过自动完成功能找到了方法。

编辑:

例如,当创建一个组时,为了折叠该组,该示例脚本如何?在此示例脚本中,它创建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());
}