从Google表格发送电子邮件的脚本发送了多次

时间:2019-08-02 23:14:58

标签: google-apps-script google-sheets

我在这里使用了本教程:https://developers.google.com/apps-script/articles/sending_emails

我遇到的问题是它多次发送通知(17、25、30次。)我也尝试了“改进”版本,该版本仅在“ Email_sent”列为“”时才发送电子邮件” t人口稠密。该脚本填充了“ email_sent”,但这并不能阻止它发送很多次,即使使用“ if”也不可能。

我不知道自己可能做错了什么,导致它发送了很多次。

我不得不稍作修改代码,因为当我使用var row = data[i]var emailAddress = row[0]时,它无法检索电子邮件地址。

如果我取出[i]并仅使用var row = data,它就可以工作。我不知道是什么引起的差异,或者是否与我遇到的问题有关。

我也将numrow更改为sheet.getlastrow()而不是静态数字,因为数据中的行数可能会更改。

这是我的代码,如本教程中用i编写的

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
   var numRows = sheet.getLastRow()

var dataRange = sheet.getRange(3, 2, numRows);

var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];
    var message = 'You have unreleased time in LETS. Please review and release.';
    var subject = 'Please review LETS time';
    MailApp.sendEmail(emailAddress, subject, message);
  } }

这种方式无法发送,表示找不到收件人,调试器显示emailAddress行返回空白。如果删除[i],它将运行,但是每次运行时,我都会收到大量电子邮件,并且每个电子邮件地址只能发送一封电子邮件。

1 个答案:

答案 0 :(得分:0)

获取范围的语法为getRange(row, column, numRows)

它期望行数,而不是最后一行作为第三个参数。

假设您的最后一行是6,

var dataRange = sheet.getRange(3, 2, numRows);

表示“ 从6号数字开始获得6行”,或“ 从3号到8行获得”。但是第7和8行将没有任何数据-这将引发错误

只需将代码更改为:

var startRow=3;
var dataRange = sheet.getRange(startRow, 2, numRows-startRow+1);