尝试根据复选框选择发送电子邮件

时间:2019-11-21 20:29:52

标签: google-apps-script checkbox gmail

如果选中H列中的复选框,我将尝试自动发送电子邮件。我对代码几乎一无所知,以免遇到麻烦。我的代码已经被弗兰肯斯坦(Frankenstein)在一起,所以我知道我遗漏了一些东西,但是我对此太新了,无法理解什么。如果我按原样运行代码,则如果在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();
    }
  }
  }

2 个答案:

答案 0 :(得分:1)

将您的条件更改为此:

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

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

  

这些值的类型可以为Number,Boolean,Date或String,具体取决于   单元格的值。

如果您想与电子表格中显示的数据精确地比较,可以使用getDisplayValues(),尽管我个人很少需要这样做。无论如何,如果您使用getDisplayValues(),则该复选框将在所有大写字母中返回“ TRUE”或“ FALSE”字符串。

您可以使用Logger.log()进行检查,以查看checkbox1的值。

// 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"

答案 1 :(得分:0)

尝试一下:

function send1stnotice() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 3;
  var dataRange = sheet.getRange(startRow, 1, sheet.getLastRow()-2,sheet.getLastColumn());
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var checkbox1 =row[7];
    var emailAddress = row[6];
    var subject = "test subject";     
    var message = "test message";    
    var emailSent = sheet.getRange(startRow + i, 9).getValue();     
    if (emailSent != "EMAIL_SENT" &&  checkbox1=="TRUE") { 
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 9).setValue("EMAIL_SENT");
      SpreadsheetApp.flush();
    }
  }
}
相关问题