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

Igo*_*gor 1 google-sheets google-apps-script

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

更多特定区域受到保护,只有文档管理员才能访问它.

我想做的是,让GAS对所有(匿名)用户的"onEdit"做出回应.

最简单的例子是这样的:

Code.gs

function onEdit(e) { Browser.msgBox('Editing...'); }
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢你提前!

Ser*_*sas 5

实际上有2个onEdit触发器,"简单"触发器和"可安装"触发器.

简单的onEdi牛逼运行的用户访问电子表格,而不要求任何的授权,这意味着它无法执行任何需要的授权和使用SpreadsheetApp方法需要授权(如你注意到当你自己运行该脚本的第一次) .

安装的触发器(onEdit,onChange等等)作为脚本的作者运行,更准确,它们作为安装触发器的用户运行.

它们(触发的功能)具有与用户自己相同的"权限",并且可以完成用户可以执行的所有操作.

使用电子表格的匿名用户(未登录)将触发此脚本,但他们不会对脚本的作用负责,并且所有操作都将以触发器"安装程序"的名称完成.

请随意尝试我编写此脚本的电子表格:

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');
}
Run Code Online (Sandbox Code Playgroud)

在您尝试并测试该副本后,请在不安装任何特殊触发器的情况下制作副本.

然后比较结果:在我的工作表中,您将从第二个函数中获取消息,而在您的工作表中,它将是来自第一个函数的消息.

当可安装触发器处于活动状态并且编辑工作表时,将触发这两个功能,并且您实际上可能会连续看到这两个文本,因为它们通常不会花费完全相同的时间来运行.

如果您在工作表中安装了一个调用该onEditInstallable函数的触发器,匿名用户将始终看到第二个用户onEdit(从脚本编辑器转到Ressources/current project triggers/create new trigger并选择您需要的触发器)

关于该主题的文档:简单的触发器和可安装的触发器