google-apps-script - 尝试根据复选框选择发送电子邮件
问题描述
如果选中了 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();
}
}
}
解决方案
将您的条件更改为:
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"
推荐阅读
- javascript - 从 Cognito 触发器获取数据
- javascript - puppeteer UnhandledPromiseRejectionWarning:错误:页面崩溃
- unity3d - Oculus Quest 的 Unity XR 输入设备特性始终无
- c++ - C++ 字节、sprintf、十六进制。将字节转换为二进制
- c++ - 尝试使用冒泡排序按字母顺序对字符串数组进行排序,但排序返回的是数组的倒数
- flutter - 颤振,火力基地。我想显示除电子邮件和密码以外的注册表单数据并连接到唯一的 uid
- javascript - 当用户添加到订单时,无法将商品推送到购物车
- java - 从 Firebase 数据库中读取
- python - 使用枕头调整上传到 s3 的图像大小
- python - bash脚本将整数作为参数并添加它们