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,
}
},
},
},
},
使用 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,
}
},
},
},
},