gpt4 book ai didi

javascript - Google Apps 脚本 : Service invoked too many times for one day: email

转载 作者:行者123 更新时间:2023-12-05 00:07:17 25 4
gpt4 key购买 nike

我正在尝试遍历电子表格,并为每一行发送一封电子邮件。发送电子邮件后,我想删除该行。

然而,这是行不通的。

出于某种原因,它开始疯狂地发送电子邮件,并在某个时候达到限制并退出。

它实际上只删除了一行。

请看下面的代码:

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="test@test.com"}
if (emailAddress=="Autre1"){sendto="test1@test.com"}
if (emailAddress=="Autre2"){sendto="test2@test.com"}
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 .

关于您的代码,查看执行记录,脚本似乎无法识别 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="test@test.com"}
if (emailAddress=="Autre1"){sendto="test1@test.com"}
if (emailAddress=="Autre2"){sendto="test2@test.com"}
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)
}
}
}

我希望这有点可以理解,我不太擅长解释事情。

关于javascript - Google Apps 脚本 : Service invoked too many times for one day: email,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42068737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com