我正在尝试使用Google App Scripts为我发送的HTML电子邮件。我的代码工作到了我可以发送电子邮件的程度,但是你会在我的代码中看到我有4个不同的模板要发送。 。正如您将看到我有一些代码将模板更改为1以找到正确的模板和dateMath以增加下一封要发送的电子邮件的日期。
我现在正在使用的问题是deleteRow和appendRow。我有2个用户正在尝试通过电子邮件发送,当我运行代码时,deleteRow和appendRow会将其中一个用户替换为另一个用户。我的屏幕截图会更有意义。有什么见解吗? Before Script
function sendEmails(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var today = Utilities.formatDate(new Date(), "MDT", "dd/MM/yyyy");
for(var i = 1; i<data.length; i++){
if(data[i][3] !== ""){ //skip if is empty
if(isValidDate(data[i][3])){ //skip if isn't a valid date
var formattedDate = Utilities.formatDate(data[i][3], "MDT", "dd/MM/yyyy");
if(formattedDate == today){ //send email if checkin date is today
if(data[i][4] == 1) {
var template = HtmlService.createTemplateFromFile('Template1');
} else if(data[i][4] == 2){
var template = HtmlService.createTemplateFromFile('Template2');
} else if(data[i][4] == 3){
var template = HtmlService.createTemplateFromFile('Template3');
} else {
var template = HtmlService.createTemplateFromFile('Template4');
}
var email = data[i][2];
var firstName = data[i][0];
var lastName = data[i][1];
template.firstName = firstName;
var subject = "Your Next Steps ";
var bcc = "spencer@kwwestfield.com";
var message = template.evaluate();
GmailApp.sendEmail(email,
subject,
message.getContent(), {
htmlBody: message.getContent(),
bcc: bcc
});
//change the template
//delete the row
sheet.deleteRow(i+1);
//add the row again
var newTemplate = data[i][4] + 1;
var newSend = dateMath(data[i][3], 8);
sheet.appendRow([firstName, lastName, email, newSend, newTemplate]);
}
}
}
}
}
/**
* Does math on dates
* Triggered from functions
* Input: date = the orginal date, d = +- number of days
* Output: a new date
*/
function dateMath(date,d){
var result = new Date(date.getTime()+d*(24*3600*1000));
return result
}
/**
* Figures out if is a data
* Triggered from functions
* Input: d: any
* Output: boolean
*/
function isValidDate(d) {
if ( Object.prototype.toString.call(d) !== "[object Date]" ){
return false;
} else {
return true;
}
}
答案 0 :(得分:0)
由于您要删除行,i
值不再对应相同的范围。例如,您有一个包含5个元素的数组:
[A, B, C, D, E]
如果您删除元素0
,则会获得
[B, C, D, E]
现在你增加你的迭代器i++; // i = 1
,所以你操作的下一个值不是&#34; B&#34;,而是&#34; ; C&#34 ;.
你可以试试这个
function test() {
var letters = ["A", "B", "C", "D", "E"];
for (var i=0; i<letters.length; i++) {
Logger.log("i : " + i + " || Letter: " + letters[i]);
letters.shift();
}
}
要修复代码,请添加一个独立于数组迭代器row
的{{1}}变量。
i