Google表格通过API替换颜色

时间:2017-06-06 03:56:48

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

在Python中使用工作表API我试图使用交替颜色格式化工作表。在UI中,可以在Format>中找到它。交替的颜色......

从我能够找到的内容可以通过使用banding的API完成。不幸的是,我还没有找到一个如何完成这个工作的实例。下面是我构建的值词典,目前颜色值并不重要,我只是喜欢将纸张着色。

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

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

1 个答案:

答案 0 :(得分: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,
          }
        },
      },
    },
   },