Google Spreadsheet GAS触发器不会为匿名编辑器触发

时间:2014-10-11 18:13:56

标签: google-apps-script google-sheets

我有一个电子表格来跟踪数据,每个有链接的用户都可以编辑。虽然我明白,这是一个安全风险,我不介意,因为电子表格只是我所知道的并且对我所在的公会感兴趣。

更多某些区域受到保护,只有文档的管理员才能访问它。

我想要做的是,让GAS回复" onEdit"适用于所有(匿名)用户。

最简单的例子就是:

Code.gs

function onEdit(e) { Browser.msgBox('Editing...'); }

我把它附在桌子上 - >在编辑触发器上它会显示给我 - 因为我已登录或因为我是本文档的管理员。但是:其他(匿名)用户由于某种原因没有收到消息框。我已经阅读了权限表并且说明了,如果你想要使用任何类型的脚本(除了那些时间驱动的脚本,以一个脚本的名义执行,添加它们),显然你必须登录)。

没有解决方法吗?我的触发器只是将值从一个表复制到另一个表,对它们进行排序和格式化。

非常感谢你!

1 个答案:

答案 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 triggersinstallable ones