javascript - 如何获取 Google Apps 脚本中特定值的检查列?
问题描述
我有一个电子表格,可以手动更新名称。我设置了一个触发器,该触发器在电子表格被编辑时激活该功能。我希望该函数检查名称“John”的范围 D1:D500。如果一个单元格包含该值,它应该发送一封电子邮件。我已经两年多没有写代码了,所以我很生疏。我不太确定我在这里做错了什么。我认为弄乱了数组。
function CheckMail() {
var mailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("October").getRange("D1:D500");
var data = mailRange.getValue();
var dataLength = data.length;
for(var i=0;i<dataLength;i++){
if(data[i][1] == "John") {
var emailAddress = "myemail@gmail.com"
var message = 'New parcel for ' + data[i][1];
var subject = 'New parcel';
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
解决方案
为了满足您的需求,您可以使用以下代码:
function CheckMail() {
var mailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("October").getRange("D1:D500");
var data = mailRange.getValues();
var dataLength = data.length;
for (var i=0; i<dataLength; i++) {
if (data[i][0] == "John") {
var emailAddress = "myemail@gmail.com"
var message = 'New parcel for ' + data[i][0];
var subject = 'New parcel';
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
主要区别在于:
- 使用
getValues()
代替getValue()
。请注意,getValue()
它只返回您拥有的范围内左上角单元格的值,而getValues()
返回一个包含范围内所有值的矩阵。 data[i][0]
使用而不是访问元素data[i][1]
。尽管单元格和行确实是 1 索引的,但 GAS 中的数组是 0 索引的。
除此之外,当前代码将检查单元格中的值是否与 John 完全匹配。其他选择是:
- 检查名称是否包含“John”。在这种情况下,您应该将if 语句中的条件替换为
data[i][0] == "John"
todata[i][0].indexOf("John") > -1
。 - 检查名称是否以“John”开头。在这种情况下,您应该将if 语句中的条件替换为
data[i][0] == "John"
todata[i][0].indexOf("John") == 0
。
推荐阅读
- javascript - 我应该通过更新属性来为 SVG 元素设置动画吗?
- java - 并发问题。优化改变指令的顺序
- c# - 通过上传超过 5 MB 的文件显示错误消息
- android - 如何以干净的方式设置 CheckBox 的 onClickListener?
- android - 为什么 Jetpack Compose Preview 什么也不显示?
- python - 无法在 Colab 上运行对象检测代码
- pkcs#11 - 如何解密 safeNet 包装的导出密钥?
- php - PHP 致命错误:未捕获的 MongoDB\Driver\Exception\InvalidArgumentException:解析 ObjectId 字符串时出错
- python - 嵌入在 python 脚本中的声音会在另一台计算机上播放吗?
- javascript - 为什么将子数组/对象上的属性设置为其索引最高的兄弟姐妹的值?