如何使用Python和Google Sheets API将数据验证复选框标记为true



我正在尝试使用setDataValidation请求更新一些数据验证复选框:然而,我不明白如何将值设置为TRUE:

"values": [],
def add_checkboxes_true(self, row_number, column, spreadsheet_id):
payload = {
"requests": [
{
"setDataValidation": {
"range": {
"sheetId": 0,
"startRowIndex": row_number - 1,
"endRowIndex": row_number,
"startColumnIndex": column,
"endColumnIndex": column + 1
},
"rule": {
"condition": {
"type": 'BOOLEAN',
"values": [],
},
"showCustomUi": True,
"strict": False
}
}
}
]
}
request = self.service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=payload)
response = request.execute()

在Google Sheets文档中,我发现:

单元格的值必须为TRUE/FALSE或在条件值列表中。数据验证支持。呈现为单元格复选框。支持零、一个或两个ConditionValue。无值表示单元格必须为TRUE或FALSE,其中TRUE表示为选中,FALSE表示为未选中。一个值表示,当单元格包含该值时,该单元格将显示为选中状态,而当单元格为空时,则显示为未选中状态。两个值表示,当单元格包含第一个值时,该单元格将显示为选中,而当单元格包含第二个值时将显示为未选中。例如,["是","否"]表示当单元格具有值"是"时,它将呈现一个复选框;是";以及当它具有值"0"时的未选中框;否";。

在您的脚本中,以下修改如何?

修改的脚本:

def add_checkboxes_true(self, row_number, column, spreadsheet_id):
gridRange = {
"sheetId": 0,
"startRowIndex": row_number - 1,
"endRowIndex": row_number,
"startColumnIndex": column,
"endColumnIndex": column + 1
}
payload = {
"requests": [
{
"setDataValidation": {
"range": gridRange,
"rule": {
"condition": {
"type": 'BOOLEAN',
"values": [],
},
"showCustomUi": True,
"strict": False
}
}
},
{
"repeatCell": {
"range": gridRange,
"cell": {
"userEnteredValue": {
"boolValue": True
}
},
"fields": "userEnteredValue"
}
}
]
}
request = self.service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=payload)
response = request.execute()
  • 在这种情况下,使用repeatCell方法检查插入的复选框。这样,这个请求就可以通过一个API调用来完成。

  • 使用repeatCell方法,如果多个复选框由同一个gridRange放置,则会选中这些复选框。

参考:

  • RepeatCellRequest

基于您在这一行专门提供的文档。

没有值表示单元格必须为TRUE或FALSE,其中TRUE表示显示为选中,FALSE显示为未选中。一个值表示当单元格包含该值且未选中时,该单元格将显示为已选中当它为空白时。两个值表示单元将渲染为当包含第一个值时选中,当包含第二个值。

您可以设置"values": ["TRUE","FALSE"],,如果范围的当前单元格值设置为TRUE,则返回checked;如果设置为FALSE,则返回unchecked。

您可以在Google Sheets上手动设置范围值,也可以通过Google Sheets API以及使用以下示例文档进行设置:

values = [
[
# Cell values ...
],
# Additional rows ...
]
body = {
'values': values
}
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheet_id, range=range_name,
valueInputOption=value_input_option, body=body).execute()
print('{0} cells updated.'.format(result.get('updatedCells')))

最新更新