首页 > 解决方案 > 尝试根据复选框选择发送电子邮件

问题描述

如果选中了 H 列中的复选框,我将尝试自动发送电子邮件。我对代码知之甚少,以至于惹上麻烦。我的代码已经被弗兰肯斯坦在一起了,所以我知道我遗漏了一些东西,但我对此太陌生,无法理解是什么。如果我按原样运行代码,如果 G 列中列出了电子邮件地址,则会发送一封电子邮件,但无论是否选中 H 列,都会发送一封电子邮件。如果未选中复选框,我不希望发送电子邮件。我已经搜索了论坛,并试图拼凑出一个适合我的解决方案,但我只是一直碰壁。我知道问题在于识别复选框,这就是我迷路的地方。任何帮助将不胜感激。

var EMAIL_SENT = "EMAIL_SENT";

function send1stnotice() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 3;  // First row of data to process
  var numRows = sheet.getLastRow()-1   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 1000)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var checkbox1 =row[7];
    var emailAddress = row[6];
    if (emailAddress.match('@') == null){
        continue;
    };  // First column
    var subject = "test subject";     
    var message = "test message";    
    var emailSent = row[8];     

    if (emailSent != EMAIL_SENT &&  checkbox1!= 'FALSE') {  // Prevents sending duplicates

      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
  }

标签: google-apps-scriptcheckboxgmail

解决方案


将您的条件更改为:

if (emailSent != EMAIL_SENT && checkbox1 == true)

复选框的值是布尔值,而不是字符串“TRUE”或“FALSE”。您正在检查它是否等于“TRUE”,但事实并非如此。因为您使用的是getValues(),所以 Apps 脚本会解释您在电子表格中看到的数据的实际值。

根据单元格的值,这些值可能是数字、布尔值、日期或字符串类型。

如果您想与电子表格中显示的数据进行完全比较,您可以使用getDisplayValues(),尽管我个人很少发现需要这样做。无论如何,如果您使用getDisplayValues(),则复选框将返回全部大写的“TRUE”或“FALSE”字符串。

您可以使用Logger.log()来查看复选框1 的值。

// Try with getValues()
var data = dataRange.getValues();
var checkbox1 =data[i][7];
Logger.log(typeof checkbox1); // boolean
Logger.log(checkbox1); // Returns either true or false

// Try again, but with getDisplayValues()
var data = dataRange.getDisplayValues();
var checkbox1 =data[i][7];
Logger.log(typeof checkbox1); // string
Logger.log(checkbox1); // Returns either "TRUE" or "FALSE"

推荐阅读