【问题标题】:Edit GoogleSheets "SendEmail" script to only send email if criteria are met编辑 GoogleSheets“SendEmail”脚本以仅在满足条件时发送电子邮件
【发布时间】:2015-05-15 16:40:11
【问题描述】:

我整个上午都在网上搜索,但一直找不到我想做的事情。我在这里找到了一个类似的帖子,但不知道如何适应我的需要。

我是一名教师,我正在考虑如何使用 Google 表格在我班上孩子的成绩低于 C 时自动向家长发送电子邮件。我能够快速找到让 Sheets 发送电子邮件的脚本,并且想知道是否可以编辑该脚本以仅在特定单元格中的值低于 70 时才发送电子邮件。

这是我找到的脚本。我将主题行编辑为“数学成绩”(这很容易弄清楚),但我想对其进行编辑,以便仅在单元格 D2(或 D3、D4、D5 等)中的值时发送电子邮件) 低于 70。(A 列有电子邮件,B 列有消息,C 列有学生的姓名,D 列有他们的数字等级。)我觉得这应该很明显,但我的脚本知识是非存在的。有人可以帮忙吗?

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 2)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues(); 

  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var subject = "Math Grade";
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

【问题讨论】:

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


    【解决方案1】:

    代码只获取了 2 列数据,它需要获取 4。

    getRange(row, column, numRows, numColumns)
    

    我添加了一行代码来获取工作表中有多少列。然后for循环多出了一行代码来获取成绩,最后又增加了if条件检查。

    function sendEmails() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var startRow = 2;  // First row of data to process
      var numRows = 2;   // Number of rows to process
      var numOfColumns = sheet.getLastColumn();
    
      // Fetch the range of cells
      var dataRange = sheet.getRange(startRow, 1, numRows, numOfColumns);
      // Fetch values for each row in the Range.
      var data = dataRange.getValues(); 
    
      var grade = "";
    
      var i = 0;
      for (i=0;i<data.length;i++) {
        var row = data[i];
        var emailAddress = row[0];  // First column
        var message = row[1];       // Second column
    
        grade = row[3];
    
        if (grade < 70) {
          var subject = "Math Grade";
          MailApp.sendEmail(emailAddress, subject, message);
        };
      };
    };
    

    【讨论】:

    • 请注意,原始代码中存在一个错误。永远不要在 javascript 中执行“for var in array”(会阻塞长度属性。)
    • 谢谢,不知道。
    • 感谢您的帮助!这段代码会起作用吗,还是里面还有错误?我已经多次运行原始代码,使用我的电子邮件地址进行测试,并且没有遇到问题。
    • 我更新了答案以在 for 循环条件中使用不同的语法。如果这回答了你的问题。请标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多