Google 工作表通过 API 交替颜色

Google Sheets alternating colors via API

使用 sheets API 和 Python 我正在尝试使用交替颜色格式化 sheet。在 UI 中,可以在格式 > 交替颜色中找到...

据我所知,这是通过 API 使用 banding 完成的。不幸的是,我没能找到一个工作示例来说明这是如何完成的。下面是我构建的值字典,目前颜色值并不重要,我只是想用它来着色 sheet.

requests = {
  'bandedRange': {
    'bandedRangeId': 1,
    'range': {
      'sheetId': 0,
      'startRowIndex': 0,
      'endRowIndex': len(values),
      'startColumnIndex': 0,
      'endColumnIndex': 4,
    },
    'rowProperties': {
      'headerColor': {
        'red': 1,
        'green': 0,
        'blue': 1,
        'alpha': 1,
      },
      'firstBandColor': {
        'red': 1,
        'green': 0,
        'blue': 0,
        'alpha': 0,
      },
      'secondBandColor': {
        'red': 0,
        'green': 1,
        'blue': 0,
        'alpha': 0,
      }
    },
  },
  'fields': '*',
}
body = {'requests': requests}
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()

失败并出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/http.py", line 840, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/$spreadsheet_id:batchUpdate?alt=json returned "Invalid JSON payload received. Unknown name "banded_range" at 'requests': Cannot find field.">

我相当确定我的问题是字段值,但我找不到在这里使用什么的有效示例。如果我完全省略字段键,我会得到同样的错误。

根据 batchUpdate, requests takes an array of Request 个对象的参考文档。每个 Request 必须只有一个字段集,可用于分段的字段为:

  "updateBanding": {
    object(UpdateBandingRequest)
  },
  "addBanding": {
    object(AddBandingRequest)
  },
  "deleteBanding": {
    object(DeleteBandingRequest)
  },

没有字段 bandedRange,这正是您要设置的。这就是错误消息 (Unknown name "banded_range" at 'requests': Cannot find field.) 所说的......虽然我不知道为什么它将 bandedRange 翻译成 snake_case.

根据您是否要添加或更新带状范围,您可以使用 UpdateBandingRequest object, or addBanding with an AddBandingRequest 对象设置 updateBanding

通过将 addBanding 添加到您的 JSON 格式。如上所述,您最终将创建以下 JSON。此外,密钥 fields 是可选的。

  {'addBanding': {
      'bandedRange': {
        'bandedRangeId': 1,
        'range': {
           'sheetId': 0,
            'startRowIndex': 0,
            'endRowIndex': len(values),
            'startColumnIndex': 0,
            'endColumnIndex': 4,
        },
        'rowProperties': {
          'headerColor': {
            'red': 1,
            'green': 0,
            'blue': 1,
            'alpha': 1,
          },
          'firstBandColor': {
            'red': 1,
            'green': 0,
            'blue': 0,
            'alpha': 0,
          },
          'secondBandColor': {
            'red': 0,
            'green': 1,
            'blue': 0,
            'alpha': 0,
          }
        },
      },
    },
   },