无法在代码中读取属性

时间:2017-10-02 08:10:35

标签: javascript google-apps-script

我继续收到此错误:

 TypeError: Cannot read property "6" from undefined. 

我认为我的代码是正确的,但我无法找到错误。

advocateEmail函数应该从findSend函数获取行数据。但是,当我运行查找发送功能时,它不起作用。

 function findSend() {
      var todaysDate = Utilities.formatDate(new Date(), "GMT", "dd/MM/yyyy");

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var tsSheet = ss.getSheetByName("Sheet1");
  var tsRows = parseInt(tsSheet.getLastRow());
  var tsRange = tsSheet.getRange("A2:F"+tsRows);
  var tsData = tsRange.getValues();

  for (i = 1; i < (tsRows); i++) { 
    var row = tsData[i];
    var sheetDate = Utilities.formatDate(new Date(row[6]), "GMT", "dd/MM/yyyy");
    Logger.log("ROW: "+row);
    //Logger.log("LOG:"+String(tsData[i].getValue()));
    if( sheetDate == todaysDate) {
     advocateEmail(row);
     Logger.log(row);
    }
  }
}

  // Send email to advocate



function advocateEmail(row) {

  var recipient= row[6]; // Who the email is sent to
  var subject= sendTheseName[1] + sendTheseLName[2] + " - Starting today"; // Subject of the message
  var message= sendTheseBackup[4] + " - Backup Code"; // Contents of the email
  MailApp.sendEmail(recipient, subject, message);
};

如果有人能帮助了解发生什么事情会很棒!

示例数据:

Timestamp   First Name  Last Name   Email   Backup code Start Date  Advocate Email  Sender
29/09/2017  Blah    Blah    Blah@blah.com   iewfiw  02/10/2017  Blah@blah.com   Anon

1 个答案:

答案 0 :(得分:1)

命令

var tsRange = tsSheet.getRange("A2:F"+tsRows);

导致tsRows-1行的范围,因为您排除了第1行。因此,tsData具有索引为0,1,... tsRows-2的行。当你的循环

for (i = 1; i < (tsRows); i++) { 
  var row = tsData[i];

以i值tsRows-1运行,由于i超出索引范围,变量行未定义。因此错误。

我认为潜在的问题是你没有考虑以0开头的JavaScript索引。row[6]中存在同样的问题。由于数组row有6个元素,来自列A,B,C,D,E,F,它们编号为0,1,2,3,4,5。没有row[6]

我还建议根据实际大小循环遍历双数组,如

for (i = 0; i < tsData.length; i++) {
  ... do something with tsData[i] 
}