如果选中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();
}
}
}
答案 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();
}
}
}