0

因此,我正在尝试编写一个代码,当单元格中出现特定值时将发送电子邮件。为此,我使用了一个可安装的 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");
  }
}

我在Edit>>Current project's triggers的手动触发器上添加了这个。它在调试、发送电子邮件等时工作正常。但是,当我编辑工作表时,不会触发代码!我不确定这次我做错了什么。

4

2 回答 2

0

是的 (e) 只有在工作表内触发时才有价值。您不能只在脚本编辑器中对其进行测试。我也不得不花时间弄清楚这一点。

于 2017-03-10T22:02:57.400 回答
0

另一个答案和桑迪的评论都是正确的,如果函数不是从“编辑”事件中调用的,那么 e 确实是未定义的......

但是我的朋友Mogsdad在这篇出色的文章中当然提出了一个巧妙的解决方法:如何在 GAS 中测试触发功能?


编辑

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

下面是一个简化的版本来展示它的工作方式。你只需要定义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);
}
于 2017-03-10T22:16:04.930 回答