我有一个脚本可以添加新行并以某种方式更改工作表。 我想锁定这个表,以便不能手动编辑,但允许运行脚本。
有办法做到这一点吗?
答案 0 :(得分:8)
是的,这不是最容易做到的事情,但它是可能的。
但在我们开始之前,了解Google电子表格/表格保护的工作原理非常重要。
无法保护文件所有者的工作表或范围。因此,如果您还想保护自己的文件(假设您是所有者)。那么现在唯一可用的解决方案(我希望他们将来可以更改)是将文件的所有权更改为另一个帐户。大多数人所做的是使用另一个他们没有积极使用的Google帐户(如果您还没有,可以轻松创建一个虚假的帐户)。
然后,在将文件传输到另一个帐户后,您可以使用常规GUI轻松锁定对范围,工作表或整个电子表格的更改。
好的,现在到剧本。当脚本运行时,它始终使用特定帐户的授权,并且可以执行此帐户可以执行的所有操作。例如,当有人直接从脚本编辑器运行脚本,或单击自定义菜单或图像时:它会在谁点击的帐户下运行。但是如果你设置installable trigger,那么脚本总是在首先设置触发器的帐户下运行(而不是谁在执行实际触发它的操作)。 Simple event triggers以触发操作的方式运行(您可以匿名思考),但它们不能做太多,这是一个安全功能(阅读链接以便更好地理解)。
最后,当一个人将脚本发布为web-app时,会有一个选择框来选择脚本是以开发人员还是用户身份运行。非常简单。
回到问题所在。因为我们已经锁定了所需的纸张/范围内的所有人。要使脚本更改此锁定区域,它必须作为文件所有者运行!
如果您所做的更改是自动的,例如通过可安装的触发器,那么你很好。只需使用文件所有者帐户设置触发器即可。此外,如果您的用户正在“外部”访问脚本,即通过Web应用程序访问。然后这很容易,只需将web-app设置为以开发人员(文件所有者)身份运行。
最复杂的情况是,如果您需要从自定义菜单运行脚本,该菜单将在谁点击它的权限下运行,这些权限本身无法更改受保护区域。解决方案是将脚本部署为以开发人员身份运行的web-app,并使用按钮单击运行该函数以使用UrlFetch调用已部署的URL,可能会传递一些参数来指定需要执行的操作。然后,由于webapp作为开发人员(它是文件所有者)运行,它可以进行任何所需的更改,并返回(如果有什么要返回的)任何值(通常是JSON)到调用函数(它作为用户并且与他的会话相关联),因此您可以在弹出窗口或烤面包机上向他显示消息等。
这有点棘手,但效果很好,你可以在电子表格中包含的相同脚本上完成所有这些工作。但是,如果您担心用户可能会访问脚本编辑器并更改代码(这是可能的),那么您应该将Web应用程序部分分离到不同的文件上,而不需要与他们共享。< / p>
答案 1 :(得分:0)
是,但仅适用于不是脚本所有者的其他人。只需使用2个帐户作为所有者,另一个作为读者。