可安装触发器的事件对象

时间:2017-03-10 20:39:52

标签: google-apps-script

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

document.getElementById('hiddeninput').value

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

我是一个绝对的Javascript noob,所以请尽可能多地启发我的编码大师!提前谢谢。

编辑: 正如塞尔说的那样,有一堆拼写错误。 VBA编码的副作用!但我纠正了拼写错误并改变了我的做法:

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");
  }
}

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

2 个答案:

答案 0 :(得分:0)

是的(e)只有在工作表内触发时才有值。您无法在脚本编辑器中对其进行测试。我也不得不抽出时间来解决这个问题。

答案 1 :(得分:0)

另一个答案和Sandy的评论都是正确的,如果没有从“编辑”事件中调用该函数,则确实未定义...

但我的朋友Mogsdad在这篇优秀文章中提出了一个聪明的解决方法:How can I test a trigger function in 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);
}