可安装触发器的事件对象
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);
}
所以,我正在尝试编写一个代码,当单元格中出现特定值时,它会发送一封电子邮件。为此,我使用了一个可安装的 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);
}