可安装触发器的事件对象

Event object for installable trigger

所以,我正在尝试编写一个代码,当单元格中出现特定值时,它会发送一封电子邮件。为此,我使用了一个可安装的 OnEdit 触发器,因为简单的触发器无法访问 mailApp.sendEmail。可安装触发器用于以下功能:

function myOnEdit(e){
  var ss = SpreadsheetApp.getActiveSheet();
  var email_finished = "abc@email.com"
  var r = e.range;
  var heading = ss.getrange(1,range.getcolumn()).value

  if (heading == "FINISHED" && r.getvlaues() == "√") {
    MailApp.sendEmail(email_finished, "SOP Review", "SOP has been finished");
  }
}

我收到 "e" 未定义的错误。我想知道如何为可安装的 onEdit() 触发器引用事件对象。

我是一个绝对的 Javascript 菜鸟,所以请尽可能多地启发我,我的编码专家!提前致谢。

编辑: 正如 Serge 所说,有很多错别字。 VBA 编码的副作用!但我更正了拼写错误并改变了我的做法:

function myonEdit(){
  var ss = SpreadsheetApp.getActiveSheet();
  var e = ss.getActiveCell();
  var heading = ss.getRange(1, e.getColumn()).getValues();
  var rvalue = e.getValue(); 
  var email_finished = "abc@xyz.com";

  var ui = SpreadsheetApp.getUi()
  ui.alert("Are you sure?", ui.ButtonSet.OK)

  if (heading == "FINISHED" && rvalue == "√") {
    MailApp.sendEmail(email_finished, "SOP Review", "SOP has been finished");
  }
}

我在编辑>>当前项目的触发器的手动触发器上添加了这个。它在调试、发送电子邮件和所有操作时工作正常。但是,当我编辑 sheet 时,代码没有被触发!我不确定这次我做错了什么。

是的 (e) 只有在 sheet 内部触发时才有值。您不能只在脚本编辑器中测试它。我也得花点时间弄明白。

其他答案和 Sandy 的评论都是正确的,如果函数不是从 "edit" 事件调用的,那么 e 确实是未定义的...

不过我的朋友当然提供了一个巧妙的解决方法 Mogsdad in this excellent post : How can I test a trigger function in GAS?


编辑

您的代码中有太多错别字,您的处理方式有误。

下面是一个简化版本来展示它的方式works.You只需要定义你真正需要的e参数

function test_myOnEdit() {
  var e = {};
  e.range = SpreadsheetApp.getActiveSheet().getActiveRange();
  myOnEdit(e)
}

function myOnEdit(e){
  var email_finished = "abc@xyz.com";
  var range = e.range;
  var heading = range.getValue();

  Logger.log("heading = "+heading);
}