我继续收到此错误:

 TypeError: Cannot read property "6" from undefined.


我以为我的代码是正确的,但是我找不到错误所在。

崇尚Email功能应该从findSend功能获取行数据。但是,当我运行find send函数时,它不起作用。

 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    [email protected]   iewfiw  02/10/2017  [email protected]   Anon

最佳答案

命令

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


由于排除了第1行,因此结果范围为tsRows-1行。因此,tsData的行索引为0,1,... tsRows-2。当你循环

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


以tsRows-1的i值运行,由于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]
}

09-25 12:47