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