Google Apps脚本:服务一天被调用太多次:电子邮件

时间:2017-02-06 13:15:52

标签: google-apps-script google-sheets google-apps google-sheets-api

我试图遍历Excel工作表,并为每一行发送电子邮件。发送电子邮件后,我想删除该行。

然而,这不起作用。

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

它实际上只删除了一行。

请参阅以下代码:

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)
    }
 }

逻辑是,如果有有效的电子邮件,请发送电子邮件,删除该行。

但是一旦执行,它只删除一行,发送疯狂的电子邮件,并收到电子邮件最大错误。

思想?

1 个答案:

答案 0 :(得分:1)

您可以查看每日限额here

关于你的代码,看一下执行记录,看起来脚本没有将row识别为一个整数,而是一个字符串,它附加了2,然后才转换它。所以你要删除第2行(或02),然后删除第12行,然后删除第22行,依此类推。

然而这是无关紧要的,因为你的逻辑存在问题。我会尽力解释它并希望它是可以理解的。

如果在每次迭代后删除一行,那么在第一次迭代中它将删除第2行(因为row = 0而你添加2),在第二次迭代中它将删除第3行(因为{{1}并且你添加2),但是因为在你的第一次迭代中你已经删除了一行,所以在开头的第3行中的数据现在实际上在第2行。

解决此问题的一种方法是通过反转循环,从最大值开始并倒计时。这样当你删除一行时它对下一行没有影响。我已经重写了你的代码,所以它应该像预期的那样工作。

row = 1

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