Google Apps 脚本 - 根据单元格中的值发送电子邮件

Google Apps Script - Send Email based on value in cell

我是 Google 应用脚本的新手,我有一个包含三列的电子表格:姓名、过期日期和最后联系方式:https://docs.google.com/spreadsheets/d/1W04JiFZwpGCD-qddUkNJ9xQ1xiYwZnGhissudF1EvxM/edit?usp=sharing

我想给自己发送一封电子邮件提醒,其中包含 B 列中值过期的任何人的姓名。

到目前为止,我只能编写一个脚本,为第 2 行向自己发送电子邮件。我不知道如何让脚本循环遍历 B 列中的值。

这是我的脚本:

function sendEmail() {
  
  var overdueRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B2"); 
  var overdueValue = overdueRange.getValue();
  if (overdueValue === "Overdue"){
    var nameRange = SpreadsheetApp.getActiveSpreadsheet().getRange("A2");
    var name = nameRange.getValues();
    var message = 'Reach out to ' + name 
    var subject = 'Reach out to this person.'
    MailApp.sendEmail('myemail@email.com', subject, message);
    }
}

sendEmail()

解释:

简单说几点,把流程说清楚:

  • 我假设您正在从脚本编辑器中执行 sendEmail()。这样,由于您在函数之外也有 sendEmail(),因此您最终会调用 sendEmail() 两次。删除函数的 'global' 调用并仅从脚本编辑器中调用 sendEmail()

  • 不建议在 spreadsheet 对象上应用 getRange。通过名称或位置定义特定的 sheet。在下面的示例脚本中,我通过名称 (Sheet1) 定义了 sheet。将该名称更改为您的实际情况。

  • name 在你的代码中是一个二维数组而不是一个单一的值。请小心,因为这不是正确的做法。

  • 在我下面的脚本中,我定义了一个包含列 AB 的数组。名称在 A 列中定义,过期状态在 B 列中定义。通过这种方式,您可以迭代此数组,并通过访问数组本身在每次迭代中获取单个值。我使用了 forEach,但您可以随意使用自己的迭代方法。

解决方案:

function sendEmail() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1'); // change Sheet1 to the name of your sheet
  const data = sh.getRange('A2:B'+sh.getLastRow()).getValues();
  data.forEach(r=>{
     let overdueValue = r[1];  
     if (overdueValue === "Overdue"){
         let name = r[0];
         let message = 'Reach out to ' + name;
         let subject = 'Reach out to this person.'
         MailApp.sendEmail('myemail@email.com', subject, message); 
     }
  });  
}

Sheet 适用于脚本: