Чтобы обновить защищенный диапазон, вам нужно сделать запрос batchUpdate
и указать namedRangeId
и protectedRangeId
.
Используя API Sheets:
Создайте свойrequest:
request = {
"requests": [
{
"updateNamedRange": {
"namedRange": {
"name" : "New name", #optional, only if you want to change the name
"namedRangeId": "<named-range-id>",
"range": {
"sheetId": "<sheet-id>",
"startRowIndex": int,
"endRowIndex": int,
"startColumnIndex": int,
"endColumnIndex": int,
},
},
"fields": "*"
}
},
{
"updateProtectedRange": {
"protectedRange": {
"protectedRangeId": <protected-range-id>,
"namedRangeId": "<named-range-id>",
"warningOnly": False,
"editors": {
"users": [
"user1@email.com",
"user2@email.com",
],
}
},
"fields": "*"
}
}
]
}
Затем отправьте запрос с помощью библиотеки обнаружения:
from googleapiclient import discovery
def main():
# authentication code goes here
service = discovery.build('sheets', 'v4', credentials = <your-credentials>)
spreadsheetID = '<your-spreadsheet-ID>'
request = {dictionary-object-built-above}
req = service.spreadsheet().batchUpdate(spreadsheetId = spreadsheetID, body = request)
response = req.execute()
Или с помощью библиотеки gspread:
После того, как вы включили API и получилиключ учетной записи службы согласно общей документации , вы можете создать свой запрос, как описано выше, но вам необходимо убедиться, что вы добавляете электронную почту учетной записи службы пользователям, которые могут редактировать защищенный диапазон :
request = {
"requests": [
{
"updateNamedRange": {
"namedRange": {
"name" : "New name", #optional, only if you want to change the name
"namedRangeId": "<named-range-id>",
"range": {
"sheetId": "<sheet-id>",
"startRowIndex": int,
"endRowIndex": int,
"startColumnIndex": int,
"endColumnIndex": int,
},
},
"fields": "*"
}
},
{
"updateProtectedRange": {
"protectedRange": {
"protectedRangeId": <protected-range-id>,
"namedRangeId": "<named-range-id>",
"warningOnly": False,
"editors": {
"users": [
"user1@email.com",
"serviceacc@projectname-XXXXXXXXXXXXX.iam.gserviceaccount.com",
],
}
},
"fields": "*"
}
}
]
}
и затем сделайте запрос с gspread:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
def main():
scope = ['https://www.googleapis.com/auth/spreadsheets']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
response = gc.open_by_key('<spreadsheet-id>').batch_update(request)
print(response)