如何将 Google Apps 脚本的范围缩小到特定文件
Posted
技术标签:
【中文标题】如何将 Google Apps 脚本的范围缩小到特定文件【英文标题】:How to narrow scopes for Google Apps Script to specific files 【发布时间】:2019-12-25 02:43:43 【问题描述】:主要问题:
我有两个 Google 电子表格:一个模板和一个母版。
模板被发送给人们制作副本并填写,然后我有一个脚本,可以将他们的标签复制到主电子表格。
目前授权范围很广——可以查看、编辑、删除所有用户的电子表格。由于只涉及两个文件,我想将范围缩小到这两个,主要是因为授权过程现在对用户来说看起来很粗略。
有没有办法限制特定电子表格与所有电子表格的范围?
到目前为止我发现/研究的内容:
您似乎可以轻松地将范围限制为当前文件,或要求访问所有电子表格。
我找到了两种方法:
1) 仅当前 将此添加到脚本的顶部: /** * @OnlyCurrentDoc */ 这意味着我无法将选项卡复制到主电子表格。
2) 设置显式范围 按照此处所述进入清单: https://developers.google.com/apps-script/concepts/scopes 似乎这也只允许当前文件或完整的电子表格访问。
类似问题:
其他人也提出了类似的问题,但在涉及多个特定文件的特定问题上没有得到答案。
How to use narrower Google Apps Script Authorization Scope when accessing file from own drive
How to narrow down the auth/drive scope for a google apps script?
代码和潜在想法:
我还没有尝试过白名单 - 有帮助吗?我会将模板上的主电子表格列入白名单吗?
我尝试“@OnlyCurrentDoc”时的授权将权限定义为“查看和管理已安装此应用程序的电子表格”。我可以在我的主电子表格中安装这个应用程序并让他们说话吗?有什么想法吗?
//这几乎是唯一适用的代码:
var admin_ss = SpreadsheetApp.openById([ID]);
var this_ss = SpreadsheetApp.getActiveSpreadsheet();
【问题讨论】:
【参考方案1】:可能的方法:
CurrentOnly 范围:
https://www.googleapis.com/auth/spreadsheets.currentonly
您可以通过发布脚本将其安装在许多工作表中作为附加组件,或者
在主电子表格中发布网络应用程序。您可以创建一个doPost()
函数来接收和授权从从属电子表格写入主电子表格的任何请求。
Drive.file 范围:
https://www.googleapis.com/auth/drive.file
您可以使用此范围访问使用此项目创建/打开的任何文件。
您可以创建一个 Web 应用程序以用户身份执行,并从主电子表格创建一个从电子表格。 Master 需要共享给用户或者
使用 Google 选择器/网络应用程序让用户手动选择/打开主/从电子表格,以便仅提供对这些工作表的应用程序访问权限。
参考资料:
Add on current only scope Web app guide OAuth scopes list Google Picker【讨论】:
谢谢@TheMaster!我喜欢 drive.file 范围的想法。如果项目打开另一个电子表格(var admin_ss = SpreadsheetApp.openById("ID")),为什么该权限不允许访问? Web 应用程序和 Google 选择器有点超出我的能力,但我会弄明白的!! @EastBay 打开应该由用户使用选择器手动完成。或者,脚本应该已经创建了原始文件。SpreadsheetApp.create()
如果需要,您可以手动/以编程方式在其中输入信息
啊,从原始文件创建模板非常有意义,并且很容易融入我的工作流程中。非常感谢!以上是关于如何将 Google Apps 脚本的范围缩小到特定文件的主要内容,如果未能解决你的问题,请参考以下文章
Google Apps 脚本 - 根据 for 循环匹配将数据范围移动到值 =“是”
我是否需要更改我的Apps脚本代码,因为Google+登录功能已被弃用?
如何使用 Google Apps 脚本将来自 Google 电子表格和 ScriptDB 的数据插入 BigQuery 表