我有一个电子表格,可以手动更新名称。我设置了一个触发器,只要电子表格被编辑,它就会激活该功能。我希望函数检查名称“ 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);
}
}
}
答案 0 :(得分:5)
评论中分享的一些好处-使用getValues
(复数)而不是getValue
+
您还不需要 data[i][1]
(二维数组),因为您正在获取一列数据:)
尝试一下-
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] == "John") {
Logger.log("Got John")
}
}
}
您可以根据需要替换 Logger 并运行任何其他代码。希望这会有所帮助!
编辑:删除我关于data[i][1]
为何无效的理由
答案 1 :(得分:2)
为了满足您的需求,您可以使用以下代码:
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完全匹配。其他选项是:
data[i][0] == "John"
替换为data[i][0].indexOf("John") > -1
。data[i][0] == "John"
替换为data[i][0].indexOf("John") == 0
。