使电子表格只能通过脚本编辑

kop*_*sky 3 google-apps-script

我有一个脚本,它添加新行并以某种方式更改工作表.我想锁定此工作表,以便无法手动编辑,但允许运行脚本.

有没有办法做到这一点?

Hen*_*reu 9

是的,这不是最容易做到的事情,但它是可能的.

但在我们开始之前,了解Google电子表格/表格保护的工作原理非常重要.

无法保护文件所有者的工作表或范围.因此,如果您还想保护自己的文件(假设您是所有者).那么现在唯一可用的解决方案(我希望他们将来可以更改)是将文件的所有权更改为另一个帐户.大多数人所做的是使用他们不主动使用的另一个Google帐户(如果您还没有,可以轻松创建一个虚假的帐户).

然后,在将文件传输到另一个帐户后,您可以使用常规GUI轻松锁定对范围,工作表或整个电子表格的更改.

好的,现在到脚本.当脚本运行时,它始终使用特定帐户的授权,并且可以执行此帐户可以执行的所有操作.例如,当有人直接从脚本编辑器运行脚本,或单击自定义菜单或图像时:它会在谁点击的帐户下运行.但是如果你设置了一个可安装的触发器,那么脚本总是在谁首先设置触发器的帐户下运行(而不是谁正在执行实际触发它的操作).简单的事件触发器以触​​发操作的方式运行(您可以匿名思考),但它们不能做太多,它是一个安全功能(阅读链接以便更好地理解).

最后,当一个人将脚本发布为web-app时,就会有一个选择框来选择脚本是以开发人员还是用户身份运行.非常简单.

回到问题所在.因为我们已经锁定了所需的纸张/范围内的所有人.要使脚本更改此锁定区域,它必须作为文件所有者运行!

如果您所做的更改是自动的,例如通过可安装的触发器,那么您就是好的.只需使用文件所有者帐户设置触发器即可.此外,如果您的用户正在"外部"访问脚本,即通过Web应用程序访问.然后这很容易,只需将Web应用程序设置为以开发人员(文件所有者)身份运行即可.

最复杂的情​​况是,如果您需要从自定义菜单运行脚本,该菜单将在谁点击它的权限下运行,这些权限本身无法对受保护区域进行更改.解决方案是将脚本部署为作为开发人员运行的web-app,并使用按钮单击运行该功能以使用UrlFetch调用已部署的URL ,可能会传递一些参数来指定需要执行的操作.然后,由于webapp作为开发人员(它是文件所有者)运行,它可以进行任何所需的更改,并返回(如果有什么要返回的)任何值(通常是JSON)到调用函数(它作为用户并与他的会话相关联),因此您可以在弹出窗口或烤面包机等上向他显示消息.

它有点棘手,但效果很好,你可以在电子表格中包含的相同脚本上完成所有这些工作.但是,如果您担心用户可能会访问脚本编辑器并更改代码(这是可能的),那么您应该将Web应用程序部分分离到不同的文件上,而不需要与他们共享.