Добавить защищенный диапазон в существующий NamedRange - PullRequest
0 голосов
/ 02 января 2019

У меня есть существующий лист с существующим 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, он жалуется, что диапазон недействителен:

enter image description here

Интересно, что, кажется, игнорирует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}}}}]}

Есть идеи?

1 Ответ

0 голосов
/ 03 января 2019

Как насчет использования namedRangeId для вашей ситуации?Пример сценария выглядит следующим образом.

  1. Извлечение namedRangeId с использованием spreadsheets().get Sheets API.
  2. Установка защищенного диапазона с использованием namedRangeId с использованием spreadsheets().batchUpdate изSheets 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
                }
            }
        }
    ]
}

Таким образом, указанный диапазон может быть изменен только вами.Я использую такие настройки и подтверждаю, что они работают в моей среде.Но если в вашей ситуации это не сработало, извините.

...