Как изменить существующий защищенный диапазон в листах Google с помощью скрипта Python - PullRequest
0 голосов
/ 26 сентября 2019

В настоящее время я использую gspread для доступа к листу Google и хочу защитить определенный диапазон с помощью python, но я не уверен, как это сделать.Например, защищенный диапазон теперь «Ответы формы 1»! 3: 500, и я хочу обновить его до «Ответы формы 1»! 3: 800.

Я все еще новичок в использовании API Google и имеюпопытался прочитать документацию здесь, но я не совсем понимаю, как это реализовать.https://developers.google.com/sheets/api/samples/ranges

1 Ответ

1 голос
/ 26 сентября 2019

Чтобы обновить защищенный диапазон, вам нужно сделать запрос 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)
...