我需要一点指导!
我为Google电子表格创建了一个简单的脚本,旨在在满足特定条件时向用户发送电子邮件,并将该行标记为“电子邮件”;它在onEdit触发器上运行并且运行良好。
但是,如果多个触发器启用的用户同时打开工作表,它将从每个帐户发送相同的电子邮件。
我尝试使用:
function onChange(e) {
if (ROW HASN'T BEEN EMAILED ALREADY) {
if (3 CELLS IN A ROW HAVE CONTENT) {
if (Session.getActiveUser().getEmail() == e.user.getUserLoginId()) {
SEND THE EMAIL
MARK ROW AS EMAILED
}
}
}
}
因此,只有进行更改的用户才会发送电子邮件,但是,所有用户仍然会发送电子邮件。我已经手动比较了值Session.getActiveUser().getEmail()
和e.user.getUserLoginId()
生产,理论上它应该有效......但显然我做错了!
感谢。
答案 0 :(得分:3)
这是一个令人困惑的话题,但我相信这是正常运作的。
以下是一些细节。
onChange(e)
函数中,e.user
将始终是“拥有”文档的人。查看文档中事件的this page底部。实质上,您无法确定哪个用户的更改导致触发器触发。onEdit
事件上都有触发器时,即使只有一个用户打开了电子表格,每次触发器都会运行(基本上该函数运行两次)。但是,按照#1你不能在触发器功能中运行确定哪个用户的更改导致了onEdit
事件您需要重新考虑一下您的工作流程,可能是timed trigger每小时检查一次,以便人们通过电子邮件发送。另一种选择是只有一个作为文档所有者运行的触发器,您可以在那里执行检查逻辑。希望这是有道理的。