我目前正在使用 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
请求并指定 namedRangeId
和 protectedRangeId
。
使用表格 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/