У меня есть существующий лист с существующим 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}}}}]}
Есть идеи?