所以,我正在尝试编写一个代码,当特定值出现在单元格中时,该代码将发送电子邮件。为此,我使用可安装的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");
}
}
我在编辑>>当前项目的触发器的手动触发器上添加了此项。它在调试,发送电子邮件等所有工作正常。但是,当我编辑工作表时,代码不会被触发!我不确定这次我做错了什么。
答案 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);
}