我继续收到此错误:
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]
}