python - 如何使用 python 脚本修改 Google 工作表中现有的 protected 范围

标签 python google-sheets-api protected gspread

我目前正在使用 gspread 访问 google 工作表,我想使用 python 保护某个范围,但我不确定如何去做。例如, protected 范围现在是“Form Responses 1”!3:500,我想将其更新为“Form Responses 1”!3:800。

我在使用 google API 方面还是个新手,并尝试阅读此处的文档,但我并不完全了解如何实现它。 https://developers.google.com/sheets/api/samples/ranges

最佳答案

回答:

为了更新 protected 范围,您需要发出 batchUpdate 请求并指定 namedRangeIdprotectedRangeId

使用表格 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",
                        "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 并获得服务帐户 key 后 as per the gspread documentation ,您可以像上面那样构建您的请求,但是您需要确保将服务帐户电子邮件添加到可以编辑 protected 范围的用户:

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)

引用资料:

关于python - 如何使用 python 脚本修改 Google 工作表中现有的 protected 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108749/

相关文章:

python - 不同操作系统导入模块的路径是否不同?

javascript - 多次调用 google 表格时,API 身份验证不适用于第二次调用 : Request had insufficient authentication scopes

java - 如何使用箭头符号(->)创建 protected 方法?

google-sheets - 如何使用 Google 表格 (v4) API getByDataFilter 返回特定的数据行?

c++ - 在成员函数中访问参数的类成员

oop - 为什么 OO 语言真的需要 PROTECTED 访问修饰符?

python - 如何比较数据帧中两个连续字段是否相同?

python - 为什么我的代码会跳过 Robot Framework 上的一个步骤

python - 我可以构建一个可用于导入的自动类工厂吗?

javascript - 从谷歌表格获取数据适用于 jsfiddle 但不适用于本地客户端