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

Dpu*_*tti 0 javascript google-apps google-sheets google-apps-script

我是 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()
Run Code Online (Sandbox Code Playgroud)

soM*_*rio 5

解释:

只需要几点就可以清楚地说明该过程:

  • 我假设您是 sendEmail()从脚本编辑器执行的。这样,由于你也有sendEmail()函数外部,所以你最终会调用sendEmail()两次。删除函数的“全局”调用,并仅从sendEmail()脚本编辑器中调用。

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

  • 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); 
     }
  });  
}
Run Code Online (Sandbox Code Playgroud)

适用于脚本的工作表:

例子

  • @Dpuiatti 没有理由道歉并忽视投票否决和负面反馈。我们都是来这里学习的。我建议您从[此处](https://developers.google.com/apps-script/articles/tutorials)开始了解基础知识,然后您可以使用其他资源,例如 youtube/stackoverflow 等。我会避免在线博客网站,除非作者是该领域的专家。 (2认同)