TypeError:无法读取属性"值"来自undefined。 (第9行,文件"代码")

时间:2014-10-19 20:31:45

标签: javascript function triggers google-apps-script



function onInstall(e) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Form');


  var Timestamp = e.values[0];
  var Load = e.values[1];
  var Email = e.values[2];
  var Location = e.values[3];

  var template = HtmlService.createHtmlOutputFromFile("notification");
  template.Location = Location;

  MailApp.sendEmail(Email, "subject", "", {
    HtmlBody: template.evaluate().getContent()
  });

}




我写过这个小程序。每次用户编辑电子表格。它应该运行触发器并向列中提到的电子邮件地址发送电子邮件。我不擅长编码。但请帮助我解决这个问题,我一直在努力解决这个问题。

以下是公开电子表格Spreadsheet

的链接



function() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetName('Form');
}

function onEdit(e) {
  var Timestamp = e.values[0];
  var Load = e.values[1];
  var Email = e.values[2];
  var Location = e.values[3];

  MailApp.sendEmail(Email, "check In Call", "location");

}




2 个答案:

答案 0 :(得分:1)

2件事:

  1. 如果您尝试从脚本编辑器测试此代码运行它,它将无法正常工作,您将收到正在查看的错误消息,因为没有为e分配值(因为实际上没有事件)。
  2. 简单的onEdit功能无法发送电子邮件,请参阅有关事件和触发器的文档here
  3. 您应该在编辑时测试代码(在实际情况下)并设置可安装的onEdit触发器(脚本编辑器菜单/ ressources /此项目触发/添加新触发器)

    您还可以"模拟"包含代码的事件,有关详细信息,请参阅Mogsdad answer here

答案 1 :(得分:1)

这个脚本没有运行的原因有很多。而不是修复错误,我为您编写了从头开始的代码片段,并且我将尝试解释为什么它目前没有逐行工作。

首先,这是一些工作代码:

function onEdit(e) {
  var activateSheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(activateSheet.getSheetByName('Form'));
  var sheet = SpreadsheetApp.getActiveSheet();
  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

  MailApp.sendEmail(email, "Check In Call", location);

}

字段'加载'和'时间戳'似乎不需要你想要的东西,但无论如何我都离开了它们,因为也许你需要它们。

这里列出了一些不适合你的事情:

  1. 您调用工作表的第一个功能在任何阶段都没有运行,因为没有触发器,并且它没有将激活的工作表传递到您的“onEdit&#39” ;功能。
  2. ' getSheetName()'用于检索工作表的名称,而不是按名称获取工作表。您实际需要的方法是:' getSheetByName(name)'。
  3. e.value is only available if what's edited is a single cell,根据您的电子表格不太可能。
  4. 即使e.value不是单个单元格,你也没有正确使用它,但这不是这个问题的主题。
  5. 作为旁注:我从语法错误中感受到您不熟悉Javascript。在尝试使用Google Apps脚本之前,我建议您熟悉Javascript,以避免在尝试完成简单操作时出现许多浪费和挫折的时间。