我正在尝试循环浏览电子表格,并为每一行发送一封电子邮件。电子邮件发送后,我想删除该行。
然而那是行不通的。
由于某种原因,它开始疯狂地发送电子邮件,并在某个时候达到限制并退出。
它实际上只删除一行。
请参阅下面的代码:
function sendEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var startRow = 2; // First row of data to process
var maxRows = sheet.getMaxRows();
var range = sheet.getRange(startRow, 1, maxRows, 50)
var values = range.getValues();
for (var row in values) {
Logger.log('ID=' + values[row][0]);
var theID = values[row][0];
var message = "";
var sendto = "";
var emailAddress = values[row][2];
if (emailAddress=="Autre"){sendto="[email protected] /cdn-cgi/l/email-protection"}
if (emailAddress=="Autre1"){sendto="[email protected] /cdn-cgi/l/email-protection"}
if (emailAddress=="Autre2"){sendto="[email protected] /cdn-cgi/l/email-protection"}
message+="\n ID: " + values[row][1];
message+="\n Project Number: " + values[row][2];
var subject = "Project ID: " + values[row][1];
if (sendto!=''){
MailApp.sendEmail(sendto, subject, message);
sheet.deleteRow(row+2)
}
}
逻辑是,如果有有效的电子邮件,则发送电子邮件,删除该行。
但一旦执行,它只会删除一行,疯狂地发送电子邮件,并收到电子邮件最大错误。
想法?
您可以查看每日限额here https://developers.google.com/apps-script/guides/services/quotas.
关于您的代码,查看执行记录,脚本似乎无法识别row
作为整数,但作为字符串,它会附加 2,然后才将其转换。因此,您要删除第 2 行(或 02),然后删除第 12 行,然后删除第 22 行,依此类推。
但这是无关紧要的,因为你的逻辑有问题。我会尽力解释它并希望它是可以理解的。
如果在每次迭代后删除一行,那么在第一次迭代中它将删除第 2 行(因为row = 0
然后添加 2),在第二次迭代中它将删除第 3 行(因为row = 1
然后添加 2),但由于在第一次迭代中您已经删除了一行,因此开头第 3 行中的数据现在实际上位于第 2 行中。
解决这个问题的一种方法是反转循环,从最大值开始并倒计时。这样,当您删除一行时,它不会影响下一行。我稍微重写了您的代码,以便它能够按预期工作。
function sendEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var startRow = 2; // First row of data to process
var lastRow = sheet.getLastRow(); // getLastRow() gives you the last row that has content, while getMaxRows gives you the maximum number of rows in your sheet
var range = sheet.getRange(startRow, 1, lastRow-1, 50) // -1 because you want the number of rows from your starting position and not the index of the last row
var values = range.getValues();
for (row = values.length-1; row >= 0; row--) {
var theID = values[row][0];
var message = "";
var sendto = "";
var emailAddress = values[row][2];
if (emailAddress=="Autre"){sendto="[email protected] /cdn-cgi/l/email-protection"}
if (emailAddress=="Autre1"){sendto="[email protected] /cdn-cgi/l/email-protection"}
if (emailAddress=="Autre2"){sendto="[email protected] /cdn-cgi/l/email-protection"}
message+="\n ID: " + values[row][1];
message+="\n Project Number: " + values[row][2];
var subject = "Project ID: " + values[row][1];
if (sendto!=''){
MailApp.sendEmail(sendto, subject, message);
sheet.deleteRow(row+2)
}
}
}
我希望这有点可以理解,我不太擅长解释事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)