如何使用 python 脚本修改 Google 表格中现有的受保护范围
Posted
技术标签:
【中文标题】如何使用 python 脚本修改 Google 表格中现有的受保护范围【英文标题】:How do you modify an existing protected range in Google sheets with a python script 【发布时间】:2020-01-26 06:10:28 【问题描述】:我目前正在使用 gspread 访问谷歌表格,我想使用 python 保护一定范围,但我不知道如何去做。例如,受保护范围现在是 'Form Responses 1'!3:500,我想将其更新为 'Form Responses 1'!3:800。
我在使用 google API 方面还是新手,并尝试阅读此处的文档,但我不完全了解如何实现它。 https://developers.google.com/sheets/api/samples/ranges
【问题讨论】:
您要保护哪些范围?你的3:500
和3:800
是行还是列?您需要为列和行指定开始和结束。
【参考方案1】:
答案:
为了更新受保护的范围,您需要发出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 并获得服务帐户密钥 as per the gspread documentation 后,您可以像上面那样构建您的请求,但 您需要确保将服务帐户电子邮件添加给可以编辑受保护的用户范围:
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)
参考资料:
Google Sheets API v4 Reference Documentation REST Resource: spreadsheets.valuesspreadsheets.values.batchUpdate
method
gspread Documentation
gspread batch_update()
method
【讨论】:
看来 OP 可能希望通过 gspread 来实现这一点。添加使用 gspread 的示例脚本后,它可能对 OP 更有用。如果我误解了 OP 的目标,我深表歉意。 @Tanaike gspread 没有编辑受保护范围的功能,这需要通过 API 完成。 感谢您的回复。 “编辑保护范围”是通过 Sheets 的电子表格.batchUpdate 方法实现的。在您的脚本中,google-api-python-client 使用 Sheets API 的电子表格.batchUpdate 方法。在这种情况下,gspread 可以使用 Sheets API 的 batchUpdate 方法。 Ref 所以我认为,当不仅提出您的带有 google-api-python-client 的示例脚本,还提出带有 gspread 的示例脚本时,它们可能对 OP 和其他用户更有用。 @Tanaike 感谢您提供文档链接,我现在将使用 gspread 用法更新我的答案。 感谢您回复并添加更多信息。我认为这是一个很好的答案,将对 OP 和其他用户有用。以上是关于如何使用 python 脚本修改 Google 表格中现有的受保护范围的主要内容,如果未能解决你的问题,请参考以下文章
如何使用GAE收听Google表格,然后运行一组python代码?
如何使用 Google Apps 脚本将来自 Google 电子表格和 ScriptDB 的数据插入 BigQuery 表
从工作表中的 Google Apps 脚本访问 BigQuery 时需要登录错误
仅通过 Google Apps 脚本值修改 Google 电子表格