我在这里使用了本教程: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],它将运行,但是每次运行时,我都会收到大量电子邮件,并且每个电子邮件地址只能发送一封电子邮件。
答案 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);