类型错误:无法读取未定义的属性“范围”(TypeError: Cannot read propert

2019-10-22 04:40发布

我写了这个谷歌应用程序的脚本。 目的:每次我编辑“位置更新”脚本应该发送电子邮件至“经纪人电邮”。 这里是链接到电子数据表 :

function onEdit(e) {
  var activateSheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(activateSheet.getSheetByName('Responses'));
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = e.range;
  var row = e.range.getRowIndex();//Gets the row the change was made to.  

  var timestamp = sheet.getRange(row, 1).getValues(); //Gets the email
  var load = sheet.getRange(row, 2).getValues(); //Gets the email
  var email = sheet.getRange(row, 3).getValues(); //Gets the email
  var location = sheet.getRange(row, 4).getValues(); //Gets the email
  var template = HtmlService.createTemplateFromFile("template");
 template.load = load;
 template.location =location;


  MailApp.sendEmail(email,"Hi","this is my email",{htmlBody: template.evaluate().getContent()});
   }
<html>
<h1><b>This is a Check-In call for load number: <?= load ?></b></h1>
<p>
<?= location ?>
</p>
<p>
Please do not reply this email, we don't read these emails. If you have any questions/concers please <a href="google.com">Click Here</a>. We will get back to as soon as we can.
</p>
</html>

Answer 1:

错误:

范围没有定义

意思是说, getRange()方法失败。 如果变量被用于分配的范围内,则该变量将具有所分配的值undefined 。 如果该区域没有被分配给一个变量,但使用在链,那么它也undefined

如果你是从脚本编辑器内运行的代码,你会得到一个范围错误。 在简单的情况下onEdit()触发,你只能通过实际编辑的单元测试代码。 该e事件变量将不会有一个分配给它,除非你真正编辑细胞东西。 也就是说e当事件(小区编辑)发生变量将被分配的事件对象。

函数名onEdit()是一个保留功能名称。 为了使onEdit()函数,当单元格被编辑运行,所有你需要做的是创建一个名称的功能,而不是去通过设置过程将事件分配给函数名。 onEdit()是一个简单的触发器。 和“安装”触发必须设置。

我跑你的代码,并没有得到任何范围错误, 如果我通过编辑细胞触发它。

我得到一个错误,说明我没有权限发送电子邮件。 这是因为触发是一个“简单”的触发。 您可能需要以有权限发送电子邮件,以创建一个可安装的触发器。



Answer 2:

试试这个脚本(也张贴在谷歌文档帮助论坛)

function sendMail(e) {

var sheet = e.source.getActiveSheet();
if (sheet.getName() !== 'Responses' || e.range.columnStart !== 6 || e.range.rowStart < 2) return;
var values = e.range.offset(0, -5, 1, 6)
   .getValues()[0];
var htmlBody = '<body>' + 'Hi<br>'
+ '<h1><b>This is a Check-In call for load number:' + values[3] + '</b></h1>'
+ '<p>' + values[5] + '<\p>'
+ '<p>' + 'Please do not reply this email, we don\'t read these emails. If you have any questions/concers please <a href="google.com">Click Here</a>.'
+ 'We will get back to as soon as we can.</p>'
+ '<\body>'
MailApp.sendEmail(values[4], 'subject', "", {
   htmlBody: htmlBody
});
}

设置一个可安装onEdit触发器,看看是否可行?



文章来源: TypeError: Cannot read property “range” from undefined