【问题标题】:Google Sheets alternating colors via API谷歌表格通过 API 交替颜色
【发布时间】:2017-06-06 03:56:48
【问题描述】:

在 Python 中使用工作表 API 我正在尝试使用交替颜色来格式化工作表。在 UI 中,可以在“格式”>“交替颜色”中找到...

据我所知,这是通过 API 使用 banding 完成的。不幸的是,我还没有找到一个可行的例子来说明如何做到这一点。下面是我构建的值字典,颜色值目前并不重要,我只是想让它为工作表着色。

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.">

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

【问题讨论】:

    标签: python google-sheets google-sheets-api


    【解决方案1】:

    根据batchUpdate 的参考文档,requests 采用Request 对象数组。每个Request 必须只有一个字段集,用于绑定的可用字段为:

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

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

    根据您是否要添加或更新带状范围,您可以将updateBanding 设置为UpdateBandingRequest 对象,或者将addBanding 设置为AddBandingRequest 对象。

    通过将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,
              }
            },
          },
        },
       },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多