使用 Google 张折叠组 API

Collapsing a group using Google Sheets API

因此作为 difficulties creating a new sheet with groups I am trying to create and collapse these groups in a separate call to batchUpdate 的解决方法。我可以成功调用 addDimensionGroup 请求,但是当我请求 updateDimensionGroup 折叠我刚刚创建的组时,无论是在同一个 API 调用中还是在单独的调用中,我都会收到此错误:

{
  "error": {
    "code": 400,
    "message": "Invalid requests[1].updateDimensionGroup: dimensionGroup.depth must be \u003e 0",
    "status": "INVALID_ARGUMENT"
  }
}

但是我将深度传递为 0,正如我在请求中发送的以下 JSON 所示:

{
    "requests":[{
          "addDimensionGroup":{
            "range":{
                "dimension":"ROWS",
                "sheetId":0,
                "startIndex":2,
                "endIndex":5}
            }
        },{
         "updateDimensionGroup":{
           "dimensionGroup":{ 
               "range": {
                   "dimension":"ROWS",
                   "sheetId":0,
                   "startIndex":2,
                   "endIndex":5
               },
               "depth":0,
               "collapsed":true
           },
           "fields":"*"
        }
    }],
    "includeSpreadsheetInResponse":true}',
   ...

我不完全确定我应该为 "fields" 提供什么,UpdateDimensionGroupRequest says it is supposed to be a string ("string ( FieldMask format)"), but the FieldMask definition itself 的文档显示了多路径的可能性,但没有告诉我它们应该如何提供分隔成一个字符串。

我做错了什么?

错误信息实际上是告诉你 dimensionGroup.depth 值必须是 > 0:

如果您在 sheet 上调用 spreadsheets.get(),并且仅请求 DimensionGroup 数据,您会注意到您创建的组实际上处于深度 1

GET https://sheets.googleapis.com/v4/spreadsheets/{SSID}?fields=sheets(rowGroups)&key={API_KEY}

这是有道理的,因为深度是(根据 API 规格):

depth number
The depth of the group, representing how many groups have a range that wholly contains the range of this group.

请注意,根据定义.

,任何特定的 DimensionGroup "wholly contains its own range"

如果您的目标是更改 DimensionGroup 的状态,那么您需要设置其 collapsed 属性:

{
  "requests": 
  [
    {
      "updateDimensionGroup": 
      {
        "dimensionGroup": 
        {
          "range": 
          {
            "sheetId": <your sheet id>,
            "dimension": "ROWS",
            "startIndex": 2,
            "endIndex": 5
          },
          "collapsed": true,
          "depth": 1
        },
        "fields": "collapsed"
      }
    }
  ]
}

对于这个特定的 Request,您可以设置的唯一属性是 collapsed - 其他属性用于标识要操作的所需 DimensionGroup。因此,指定 fields: "*" 等同于 fields: "collapsed"。对于大多数请求而言,情况并非如此,因此指定 fields: "*" 然后省略非必需的请求参数会被解释为 "Delete that missing parameter from the server's representation".

要更改 DimensionGroupdepth,您必须添加或删除包含它的其他 DimensionGroup