Google App Script -搜索列,识别字符串,电子邮件内容的行



我试图创建一个脚本,当运行时,电子邮件我一行的内容是包含单词"duplicate"。我是一个初学者,一直在努力从别人的问题/答案中拼凑起来-请原谅我。我目前得到的是在12行表格上进行测试,并通过电子邮件向我发送了11个数字的列表(测试中只有三个重复的标签)-电子表格示例。

问题是:

  • 无法正确识别重复标签
  • 我希望在电子邮件中包含行内容,而不是行位置

感谢您的时间和耐心

function EmailDuplicates (){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet2");
var firstrow = 2;
var column;
var findDuplicate = sheet.getSheetValues(1,1,-1,1) 
var rows = [];
var email = 'person@email.com';
var subject = 'duplicate';
var message = '';
for (var i = firstrow; i<= sheet.getLastRow(); i++){
column = 1;
findDuplicate = "Duplicate"
do{
if (sheet.getRange(i, column).isBlank()) {
rows.push(i);
findDuplicate = ; //no idea what to put here
}
else column ++;
}
while (column <= sheet.getLastColumn()&& findDuplicate);
}
if (rows.length == 0) message +- 'There were no duplicates today.';
else {
message +='The following rows had duplicates: <ul>';
for (var i = 0; i <rows.length; i++) message += '<li>' + rows[i] + '</li>';
message += '</ul>';
}

MailApp.sendEmail(email, subject, message);
}

帮自己一个忙,对这些值使用filter方法。通过这种方式,您可以快速获得满足条件的所有行的子集("duplicate")。然后遍历那些过滤过的行。在大多数情况下,使用forEach更流畅的(也是更现代的)方式,而不是for循环:

function EmailDuplicates() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet2");
var range = sheet.getDataRange();
var values = range.getValues();
let fvs = values.filter(function (row) { return row[0] == "Duplicate"});
fvs.forEach(function (row) {
Logger.log(row);
// now do something with the record
});
}

相关内容

最新更新