【问题标题】:Send email from Google Sheet when cell is certain value当单元格具有特定值时从 Google 表格发送电子邮件
【发布时间】:2021-07-17 02:04:45
【问题描述】:

以下是我尝试使用的工作表示例:https://docs.google.com/spreadsheets/d/1M79ki9QVRkfkwy1uWyNAVddeyPpcvqDppi3Et-b-cLw/edit?usp=sharing

目标是当 I 列大于 2 且 K 列为空时发送电子邮件。 I列是基于C-H列的计数公式,手动填写。

这是我的脚本,但它似乎不起作用:

function sendEmail() {
  
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Workable");

  var listing_id = sheet.getRange("B:B").getValues();
  var flag_count = sheet.getRange("I:I").getValues();
  var action_type = sheet.getRange("K:K").getValues();

  var subject = 'New Listing Flagged';
  var message = 'Listing' + listing_id + 'has been flagged. Please resolve ASAP in the QA Google Sheet. Thank you!';
  var email_address = 'allyson@hipcamp.com';

  if (flag_count > 2 && action_type == ""){MailApp.sendEmail(email_address, subject, message)}
}

我需要进行哪些更改才能使其正常工作?

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

我在示例表中找到了您的最新代码。由于您已决定使用 onEdit 触发器,因此您需要使用 installable onEdit trigger,因为您使用的是需要授权的 MailApp.sendEmail() 服务。

先决条件(可安装触发器):


示例代码:

function sendNotification1(e) {
  Logger.log(JSON.stringify(e));
  var ss = SpreadsheetApp.getActiveSpreadsheet();   
  var sheet = ss.getActiveSheet();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var startRow = 2;
  var startCol = 3; //Column C
  var endCol = 8; //Column H

  if(sheet.getName() == "Workable"
    && col >= startCol
    && col <=  endCol
    && row >= startRow
    && sheet.getRange(row,9).getValue() > 2 //flag_count column > 2
    && sheet.getRange(row,11).getValue() == "" //action column null
    )
  {
    var campground_id = sheet.getRange(row,2).getValue();
    var email = 'your@email.com';
    var subject = "New Listing Flagged for Fraud";
    var body = 'Campground ' + campground_id + ' has been flagged for fraud. Please resolve ASAP in the QA Google Sheet. Thank you!';
    MailApp.sendEmail(email, subject, body);
  }
 }

它有什么作用?

  1. 您的 I 列值取决于 C-H 列中提供的值。因此,您的触发器应该是 C-H 列(列索引 3-8)中所做的值更改。我添加了一个附加条件来检查当前活动工作表,以验证修改后的单元格是否在工作表Workable 中。如果大于 2,请检查 I 列中的值。最后,检查 K 列是否为空/空
  2. 发送电子邮件

输出:

(更新)

包含的复选框列将用作触发电子邮件通知的检查按钮。

示例代码:

function sendNotification(e) {
  Logger.log(JSON.stringify(e));
  var ss = SpreadsheetApp.getActiveSpreadsheet();   
  var sheet = ss.getActiveSheet();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var startRow = 2;

  if(sheet.getName() == "Workable"
    && col == 9
    && row >= startRow
    && sheet.getRange(row,9).isChecked()
    && sheet.getRange(row,10).getValue() > 2 //flag_count column > 2
    && sheet.getRange(row,12).getValue() == "" //action column null
    )
  {
    var campground_id = sheet.getRange(row,2).getValue();
    var email = 'your@email.com';
    var subject = "New Listing Flagged for Fraud";
    var body = 'Campground ' + campground_id + ' has been flagged for fraud. Please resolve ASAP in the QA Google Sheet. Thank you!';
    MailApp.sendEmail(email, subject, body);
  }
 }

样本表:

【讨论】:

  • 如果您遇到有关解决方案的一些问题,请告诉我,以便我进行相应更新
  • 谢谢!我刚刚更新了该代码并对其进行了测试。看起来触发器可能会导致问题,因为当我尝试测试它时错误率不断增加。关于如何解决这个问题的任何想法?错误说:“找不到脚本函数:sendEmail”
  • 我没有遇到错误。您是否成功创建了 onEdit 可安装触发器?我刚刚添加了可安装的触发器,然后编辑列 c-h 以触发计数到 3,我成功收到了邮件。你能用它的行号分享实际的错误信息吗
  • 已解决!我还没有创建 onEdit 可安装触发器,但这样做解决了这个问题。后续问题,我收到了 3 封关于 ID 83184 第 6 行的电子邮件。该行的标志计数为 5,所以我假设它在标志为 3、4 和 5 时发送了一封电子邮件(因为其他列已被编辑)。有没有办法更新脚本,让它只发送一次?
  • 这是可能的,但您需要添加另一列(复选框)并将其作为最终触发器。而不是修改列 c-h。如果您需要这方面的支持,请告诉我
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多