javascript - 当我运行响应命令时,我试图防止谷歌表格中的重复电子邮件响应
问题描述
我从 Google 表格教程中获得了此代码,它可以工作,我想在我的同行填写 Google 表格后发送电子邮件回复。该电子邮件有效,因此第一步已完成,但即使我已指定它不发送重复电子邮件,它仍会继续发送电子邮件。我的工作表如下:
Time Stamp/Email Address/Message/Complete for columns A-D
date-time/test@email.com/ Test1/ EMAIL_SENT
date-time/ test@email.com/ Test2/ EMAIL_SENT
date-time/test@email.com/ Test3/ EMAIL_SENT
// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';
/**
* 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 = 3; // Number of rows to process
// Fetch the range of cells B1:D3
var dataRange = sheet.getRange(startRow, 1, numRows, 3);
// 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 emailAddress = row[1]; // Second column
var message = row[2]; // Third column
var emailSent = row[3]; // Fourth column
if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates
var subject = 'Your PFB Request';
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 4).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
解决方案
var dataRange = sheet.getRange(startRow, 1, numRows, 3);
getRange
不是从零开始的方法。您的定义定义了一个只有 3 列宽的范围。它不包括“完成”列。
将此更改为:
var dataRange = sheet.getRange(startRow, 1, numRows, 4);
“完成”列将等同于行 [3](从零开始)。目前 row[3] 没有价值,可能是“未定义”,并会解释为什么“IF”语句不起作用。
推荐阅读
- angular - “Angulartics2GoogleAnalytics”类型上不存在属性“startTracking”
- python - Python 3 urllib Discord 与 Slack Bot
- junit - Junit双引号比较
- google-apps-script - 谷歌应用程序脚本如何在另一个工作表中复制条件格式
- unity3d - 为什么当玩家死亡时粒子不显示,它自己工作正常,但当它击中受伤的物体时不显示?(我正在做一个 2D 游戏)
- spring-boot - 无法使用@JmsListener 连接到远程队列
- unity3d - 如何将文件从 Unity 场景发送给我的朋友
- python - Libvirt Python SSH 连接超时
- python - 如何在数据集上获取 tensorflow 日志设备放置?
- postgresql - 使用 PostgreSQL 进行简单而缓慢的 SQL 查询