【问题标题】:Send automated email to certain users when certain column has been filled - google sheet填写特定列后向特定用户发送自动电子邮件 - 谷歌表
【发布时间】:2021-06-24 05:54:55
【问题描述】:

当特定列中的单元格已在谷歌表中填写时,我正在尝试向某些用户发送电子邮件通知。我尝试使用推荐的脚本,但是当我执行脚本时,会为电子表格中的每一行发送一封电子邮件。 它应该如何工作: 在我的电子表格中,有 44 列(从 A 到 AR),当指定列中的特定单元格被填满时,我想向特定的人发送电子邮件。例如:当第 V 列中的单元格已填满时,我想向 Abc@gmail.com 发送电子邮件。并且希望在 AB 列中的单元格已填满时发送电子邮件至 bcd@gmail.com,依此类推。我还希望正文电子邮件包含用户需要注意更改的哪一行(但我不知道这方面的脚本)。

谁能解释为什么我每行都会收到一封电子邮件,而脚本却不起作用。我看过其他帖子,但没有运气。非常感谢一些帮助。这是我的脚本。

function SendEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var lr = sheet.getLastRow();
for (var i=6;i<=lr;i++){     
   var rsh = sheet.getRange(i,21); 
   var wentao = sheet.getRange(i,27);
   var retail = sheet.getRange(i,28);
    

  sheet.getRange
  //Fetch values for each row in the Range. 
   var datarsh = rsh.getValues();   
     if(datarsh>0){
    var row = datarsh[i];
    var emailAddress = "abc@gmail.com";
    var message = "Hi RSH, ASM has filled a new Mi Shop request. Need your approval on the Mi Shop Request";
    var subject = "Pitch Mi Approval - Notification";
    MailApp.sendEmail(emailAddress, subject, message);
     }
   
    var datawentao = wentao.getValues();
    if (datawentao>0){   
    var row = datawentao[i];
    var emailAddress = "bcd@gmail.com";
    var message = "Hi Wentao, need your approval on Mi Shop Request in column ";
    var subject = "Pitch Mi Approval - Notification";
    MailApp.sendEmail(emailAddress, subject, message);
  }
  
    var dataretail = retail.getValues();
    if(dataretail>0){   
    var row = dataretail[i];
    var emailAddress = "cde@gmail.com";
    var message = "Hi Retail Team, Wentao has approved Mi Shop Request. Update the expansion progress in column ";
    var subject = "Pitch Mi Approval - Notification";
    MailApp.sendEmail(emailAddress, subject, message);
  }
}
}

【问题讨论】:

  • 这行sheet.getRange 肯定会导致错误。由于rsh 只是一个单元格,那么var datarsh = rsh.getValues(); 应该只是var datarsh = rsh.getValue(); 其他两个单元格也是如此。顺便说一句,第 21 列是 U 而不是 V。老实说,我认为在处理此类问题之前,我认为您应该花更多时间编写一些基本教程。您对电子表格中的数据的组织方式知之甚少。这是一个很容易用脚本调试器解决的问题。
  • “当特定列中的单元格已被填充时”是什么意思?什么时候编辑?
  • 嗨@Martí,我的意思是我希望'abc@gmail.com' 仅在V 列中的单元格已填满时才收到通知,如果我想通知'def@gmail .com' 如果 AB 列中的单元格已被填充(无论其在第 5 行还是第 6 行,如果 AB 列中的任何行已被填充,我希望通过电子邮件通知 'def@gmail.com')。希望它很清楚,非常感谢一些帮助。谢谢!

标签: javascript google-apps-script google-sheets email-notifications


【解决方案1】:

试试这个:

function SendEmail() {
  const sh = SpreadsheetApp.getActiveSheet();
  const vs = sh.getRange(6, 20, sh.getLastRow() - 5, 9).getValues();
  vs.forEach((r, i) => {
    if (r[2]) {
      MailApp.sendEmail("abc@gmail.com", "Pitch Mi Approval - Notification", "Hi RSH, ASM has filled a new Mi Shop request. Need your approval on the Mi Shop Request");
    }
    if (r[7]) {
      MailApp.sendEmail("bcd@gmail.com", "Hi Wentao, need your approval on Mi Shop Request in column ", "Pitch Mi Approval - Notification");
    }
    if (r[8]) {
      MailApp.sendEmail("cde@gmail.com", "Hi Retail Team", "Wentao has approved Mi Shop Request. Update the expansion progress in column ", "Pitch Mi Approval - Notification")
    }
  });
}

【讨论】:

  • 嗨@Cooper,脚本似乎不起作用,因为当我填写单元格B26或C26(不是V列中的单元格)时,电子邮件仍然被发送,并且发送了很多次。在电子表格中,我总共有 44 列(A 到 AR),并且总行数不断添加。我只想在 V 列中的单元格被填充(不是空白)时收到通知。希望案子清楚。谢谢!
  • 列 b 和 c 不在我考虑的范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多