将受保护范围添加到现有的 NamedRange
Add a Protected Range to an existing NamedRange
我有一个包含现有 NamedRange
的现有工作表,我想调用 API 的 batch_update
方法来保护该范围不被任何其他人编辑比拨打 batch_update
电话的用户要多。
我看过一个关于如何 的例子,但不是来自现有的 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}}}}]}
有什么想法吗?
根据您的情况使用 namedRangeId
怎么样?示例脚本流程如下
- 使用
spreadsheets().get
个工作表 API 检索 namedRangeId
。
- 使用
namedRangeId
使用 spreadsheets().batchUpdate
个工作表 API。 设置保护范围
示例脚本:
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)
注:
- 此脚本假设 Sheets API 可用于您的环境。
- 这是一个简单的示例脚本。所以请根据自己的情况修改。
参考文献:
如果这不是你想要的,我很抱歉。
编辑:
在我上面的回答中,我使用您的设置修改了您的脚本。如果要保护命名范围,请修改body
如下。
已修改 body
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"namedRangeId": namedRangeId,
"description": "Protecting xyz",
"warningOnly": False,
"editors": {"users": ["### your email address ###"]}, # Added
}
}
}
]
}
这样,命名范围只能由您修改。我正在使用此类设置并确认它在我的环境中有效。但如果在你的情况下,这不起作用,我很抱歉。
我有一个包含现有 NamedRange
的现有工作表,我想调用 API 的 batch_update
方法来保护该范围不被任何其他人编辑比拨打 batch_update
电话的用户要多。
我看过一个关于如何 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}}}}]}
有什么想法吗?
根据您的情况使用 namedRangeId
怎么样?示例脚本流程如下
- 使用
spreadsheets().get
个工作表 API 检索namedRangeId
。 - 使用
namedRangeId
使用spreadsheets().batchUpdate
个工作表 API。 设置保护范围
示例脚本:
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)
注:
- 此脚本假设 Sheets API 可用于您的环境。
- 这是一个简单的示例脚本。所以请根据自己的情况修改。
参考文献:
如果这不是你想要的,我很抱歉。
编辑:
在我上面的回答中,我使用您的设置修改了您的脚本。如果要保护命名范围,请修改body
如下。
body
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"namedRangeId": namedRangeId,
"description": "Protecting xyz",
"warningOnly": False,
"editors": {"users": ["### your email address ###"]}, # Added
}
}
}
]
}
这样,命名范围只能由您修改。我正在使用此类设置并确认它在我的环境中有效。但如果在你的情况下,这不起作用,我很抱歉。