我有一个复杂的电子表格,其中大部分工作表都被锁定,用户只能编辑少数单元格,这会触发一堆计算。这曾经工作得很好,但现在的问题是我添加了一个绘图,我在其中附加了一个脚本,因此它充当一个按钮。这样做会强制用户必须授权,现在脚本以该用户身份运行,因此当脚本尝试更新锁定到该用户的单元格时,它会失败。
如何才能使用户无法在单元格中键入内容,但我的脚本仍然可以更新它们。基本上我希望脚本能够完全访问工作表,不受用户权限的限制。
创建服务帐户
将具有编辑权限的电子表格共享到服务帐户的电子邮件
安装并使用 Google oauth2 库 获取具有必要范围(驱动器/表格/两者)的承载令牌。该令牌可用于模拟服务帐户。
使用上面的不记名令牌,您可以直接访问
SpreadsheetApp
。请参阅下面链接的第二个相关答案。在这种情况下,服务帐户的
PRIVATE_KEY
充当访问具有编辑权限的电子表格的密码。因此,直接在脚本编辑器中公开它将使任何编辑器能够访问电子表格的受保护区域和所有服务帐户资源。因此,从某种程度上来说,保护区并没有得到绝对的保护。如果保护区需要绝对保护,你也许可以绕过这个限制
使用两个脚本项目:一个绑定的脚本项目
post
将数据传输到未绑定的脚本项目,后者作为 Web 应用程序发布并保存私钥。在这里,可以向编辑者提供密码来访问未绑定的脚本。
另一种方法是简单地发布插件,因为插件的源代码对最终用户永远不可见。
使用带有复选框的可安装编辑触发器。用户单击未受保护区域中的复选框,脚本会修改受保护区域。
可安装触发器在安装它的用户的权限下运行,而不是以当前用户的身份运行。
他们可以绕过工作表的权限限制。但这是一把双刃剑。 任何具有编辑权限的人都可以触发该脚本。不仅如此,他们还可以访问脚本编辑器并根据需要修改脚本。为了限制犯规的使用,
https://www.googleapis.com/auth/spreadsheets.currentonly