javascript - 如何确保使用触发器仅发送一次
问题描述
我已经通过脚本自动发送电子邮件。但是我只想在单元格C:C“完成”时自动发送并且如果单元格12中有[K]数字1,则在发送电子邮件时会自动写入数字1。但是自动触发器总是发送电子邮件。
表格的样子: https ://docs.google.com/spreadsheets/d/1jgAdvV1UcAnh9qw3QQU9q_8MVSIyZmrukhOVxz3CJUA/edit#gid=0
// This constant is written in column L for rows for which an email
// has been sent successfully.
var EMAIL_SENT = '1';
/**
* Sends non-duplicate emails with data from the current spreadsheet.
*/
function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 3); //
// Fetch values for each row in the Range.
var data = dataRange.getValues();
var text = sheet.getRange("D2").getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var message = row [2]; // Third column
var emailSent = row[3]; // Fourth column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = 'Text is'+ text +'';
MailApp.sendEmail('example@gmail.com', subject, message);
sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT);//sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT)
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
要发送电子邮件,它只会在单元格 D 中搜索更改为“完成”的状态
解决方案
看起来你在准备这个问题上并没有付出太多努力。
var EMAIL_SENT = '1';
function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = 1; //This should be changed...perhaps to sheet.getLastRow()-startRow+1
var dataRange = sheet.getRange(startRow, 1, numRows, 3); //
var data=dataRange.getValues();
var text=sheet.getRange("D2").getValues();//This should be getValue() and column D in your sheet is State so this is probably wrong
for (var i=0;i<data.length;++i) {
var row = data[i];
var message = row [2];//This is your data insert column so this is not your message
var emailSent = row[3];//This is not column12 as it is in your spreadsheet so that's wrong
if (emailSent != EMAIL_SENT) { //this does not work as it stands now
var subject = 'Text is'+ text +''; //This text is not defined on your spreadsheet
MailApp.sendEmail('example@gmail.com', subject, message);//There is no subject nor any intelligent message
sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT);
}
}
}
推荐阅读
- kubernetes - AKS 和 Istio 之间是否存在版本依赖关系?
- html - 如何使用引导程序使我的横幅响应
- api - MicroStrategy REST API 2021 多维数据集数据源/历史
- firebase - 如果用户在 Vue js 2 中输入无效凭据,如何在登录表单上显示错误?
- c++ - 为什么在调用它的析构函数后我可以访问这个堆栈分配的对象?
- python - 未找到模块 - pipenv
- android - 使用 ViewModel 继承 Android Hilt,如何使用空构造函数创建子级
- python - logits 和 label 必须是可广播的:数据增强层使 logits 和标签不匹配
- android - Apollo Android - 无法解析 GraphQL 文件。未知变量类型
- java - 在Java中使用null调用main方法