我有一个具有现有NamedRange
的现有工作表,并且我想调用API的batch_update
方法来保护该范围,以防止该范围被除创建batch_update
通话。
我已经看到了有关如何add protected ranges via a new range definition的示例,但没有从现有的NamedRange
中看到。
我知道我需要发送addProtectedRangeResponse请求。我可以用Sheetname!NamedRange
表示法定义请求正文吗?
this_range = worksheet_name + "!" + nrange
batch_update_spreadsheet_request_body = {
'requests': [
{
"addProtectedRange": {
"protectedRange": {
"range": {
"name": this_range,
},
"description": "Protecting xyz",
"warningOnly": False
}
}
}
],
}
编辑:鉴于@Tanaike的反馈,我将该调用调整为以下内容:
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"namedRangeId": namedRangeId,
"description": "Protecting via gsheets_manager",
"warningOnly": False,
"requestingUserCanEdit": False
}
}
}
]
}
res2 = service.spreadsheets().batchUpdate(spreadsheetId=ssId, body=body).execute()
print(res2)
但是,尽管它列出了新的保护,但仍然列出了5个不同的用户(全部)作为编辑者。如果我尝试手动编辑由gsheets_manager脚本添加的保护,它将抱怨该范围无效:
有趣的是,根据返回的消息,它似乎忽略了requestUserCanEdit标志:
{u'spreadsheetId': u'NNNNNNNNNNNNNNNNNNNNNNNNNNNN', u'replies': [{u'addProtectedRange': {u'protectedRange': {u'requestingUserCanEdit': True, u'description': u'Protecting via gsheets_manager', u'namedRangeId': u'1793914032', u'editors': {}, u'protectedRangeId': 2012740267, u'range': {u'endColumnIndex': 1, u'sheetId': 1196959832, u'startColumnIndex': 0}}}}]}
有什么想法吗?
答案 0 :(得分:1)
如何根据情况使用namedRangeId
?示例脚本的流程如下。
namedRangeId
检索spreadsheets().get
。namedRangeId
和Sheets API的spreadsheets().batchUpdate
设置保护范围。nrange = "### name ###"
ssId = "### spreadsheetId ###"
res1 = service.spreadsheets().get(spreadsheetId=ssId, fields="namedRanges").execute()
namedRangeId = ""
for e in res1['namedRanges']:
if e['name'] == nrange:
namedRangeId = e['namedRangeId']
break
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"namedRangeId": namedRangeId,
"description": "Protecting xyz",
"warningOnly": False
}
}
}
]
}
res2 = service.spreadsheets().batchUpdate(spreadsheetId=ssId, body=body).execute()
print(res2)
如果这不是您想要的,对不起。
在上面的答案中,我使用您的设置修改了脚本。如果要保护命名范围,请按如下所示修改body
。
body
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"namedRangeId": namedRangeId,
"description": "Protecting xyz",
"warningOnly": False,
"editors": {"users": ["### your email address ###"]}, # Added
}
}
}
]
}
这样,只有您自己可以修改命名范围。我正在使用此类设置,并确认它可以在我的环境中正常工作。但是,如果您的情况不起作用,对不起。