我有一个电子表格来跟踪数据,每个有链接的用户都可以编辑。虽然我明白,这是一个安全风险,我不介意,因为电子表格只是我所知道的并且对我所在的公会感兴趣。
更多某些区域受到保护,只有文档的管理员才能访问它。
我想要做的是,让GAS回复" onEdit"适用于所有(匿名)用户。
最简单的例子就是:
Code.gs
function onEdit(e) { Browser.msgBox('Editing...'); }
我把它附在桌子上 - >在编辑触发器上它会显示给我 - 因为我已登录或因为我是本文档的管理员。但是:其他(匿名)用户由于某种原因没有收到消息框。我已经阅读了权限表并且说明了,如果你想要使用任何类型的脚本(除了那些时间驱动的脚本,以一个脚本的名义执行,添加它们),显然你必须登录)。
没有解决方法吗?我的触发器只是将值从一个表复制到另一个表,对它们进行排序和格式化。
非常感谢你!
答案 0 :(得分:5)
实际上有2个onEdit触发器,“简单”触发器和“可安装”触发器。
简单的onEdi t在用户访问电子表格时运行而不需要任何授权,这意味着无法执行任何需要授权的内容并使用SpreadsheetApp方法需要授权(正如您第一次自己运行该脚本时所注意到的那样)。
可安装触发器(onEdit,onChange等等)作为脚本作者运行,更准确,它们以安装的用户身份运行触发器。
他们(触发的功能)拥有与用户本人相同的“权利”,可以完成用户可以做的所有事情。
使用电子表格的匿名用户(未登录)将触发此脚本,但他们不会对脚本执行的操作负责,并且所有操作都将以触发器“安装程序”的名称完成。
随意尝试编写此脚本的this spreadsheet:
function onEdit(e) {
SpreadsheetApp.getActiveRange().setValue('simple onEdit Trigger running as sheet user without authorization');
}
function onEditInstallable(e) {
SpreadsheetApp.getActiveRange().setValue('Installable onEdit Trigger running as script author');
}
在您尝试并测试该副本后,请在不安装任何特殊触发器的情况下制作副本。
然后比较结果:在我的工作表中,您将从第二个函数中获取消息,而在您的工作中,它将是来自第一个函数的消息。
当可安装触发器处于活动状态并且你编辑工作表时,两个功能都将被触发,并且您可能会连续实际看到这两个文本,因为它们通常不会完全相同的时间跑步。
如果您在工作表中安装了一个调用onEditInstallable
函数onEdit
的触发器,匿名用户将始终看到第二个用户(来自脚本编辑器goto Ressources / current project triggers / create new trigger并选择你需要的那个)
有关该主题的文档:simple triggers和installable ones