【问题标题】:Script to sent email from Google Sheet is sending multiple times从 Google 表格发送电子邮件的脚本正在发送多次
【发布时间】:2019-08-02 23:14:58
【问题描述】:

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

【问题讨论】:

  • 我认为提供您当前的脚本来复制您的问题将帮助用户思考解决方案。当然,请删除您的个人信息。
  • [i] 部分var row = data[i]; 指的是元素在数据中的位置。变量i 是第二个示例中的计数器,从零开始。数据在一个数组中。数组中有元素。每个元素都在某个位置。第一个数据元素位于零位置。数据位于二维数组中,该数组是具有内部数组的数组。内部数组是电子表格中的每一行。您可以尝试使用调试器并单步执行代码以逐行查看它在做什么。您可以单独运行每一行。请参阅帮助 - 文档 - 疑难解答
  • 我已经运行了调试器。当我使用 data[i] 时,它无法发送,因为它找不到收件人,并且调试部分中具有 emailAddress 变量的行变为空白。我打算附上调试部分的图像,但我想我不能?

标签: google-apps-script google-sheets


【解决方案1】:

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

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

假设你的最后一行是 6,

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

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

只需将您的代码更改为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2020-12-15
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多