我有一个我想为指定标签运行的电子邮件脚本,还要确保它跳过了具有空白值的所有行,因为当前似乎一旦击中空白,它似乎都会分解行。
我已经成功地构建了用于一个选项卡的脚本,但是一旦我尝试使其用于多个选项卡。
function reminders() {
var ss = SpreadsheetApp.openById("SHEET-ID");
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName(("sheet_1","sheet_2","sheet_3")));
var editedCell = sheet.getActiveRange().getColumnIndex();
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var text1 = 'Insert body of email here';
for (var i = 1; i < data.length; i++)
(function(val) {
var row = data[i];
var recipient = row[4];
var name = row[2];
var replyto = 'reply_to@email.com';
var body = 'Dear' + ' ' + name + ',' + 'nn' + text1;
var subject = 'Hello World';
GmailApp.sendEmail(recipient, subject, body, {from:'reply_to@email.com', replyto:'reply_to@email.com'});
})(i);
}
这当前适用于Sheep_1,但不适用于Sheet_2或Sheep_3。
有人对我如何改进此脚本以发送到多张纸并跳过空白行有什么建议?
- 您想使用电子表格" C"one_answers" E"的值发送电子邮件。
- 您想为" sheet_1"," sheet_2"one_answers" sheet_3"的表名称运行脚本。
- 您想跳过没有列" C"和/或" E"的值的行。
如果我的理解是正确的,那么这种修改怎么样?
修改点:
- 似乎在运行
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName(("sheet_1","sheet_2","sheet_3")));
时,仅检索" Sheet_3"。- 在您的情况下,我认为可能不需要使用
setActiveSheet()
。
- 在您的情况下,我认为可能不需要使用
-
getSheetByName(("sheet_1","sheet_2","sheet_3"))
的参数数量是一个。- 当您想使用多个纸时,请在循环中使用每个表名称。
-
var editedCell = sheet.getActiveRange().getColumnIndex();
在您的脚本中不使用。 -
(function(val) {
的val
在您的脚本中不使用。 - 当您要跳过空行时,请在
GmailApp.sendEmail()
之前放置IF语句。这样,在GmailApp.sendEmail()
上删除了该错误。
当以上点反映到您的脚本时,如下所示。请将其视为几个答案之一。
修改后的脚本:
请复制并将以下修改后的脚本粘贴到脚本编辑器中。
function reminders() {
var sheets = ["sheet_1","sheet_2","sheet_3"]; // Please set the sheet names here.
var ss = SpreadsheetApp.openById("SHEET-ID");
for (var s = 0; s < sheets.length; s++) {
var sheet = ss.getSheetByName(sheets[s]);
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var text1 = 'Insert body of email here';
for (var i = 1; i < data.length; i++) {
var row = data[i];
var recipient = row[4];
var name = row[2];
if (!recipient || !name) continue; // Here, the empty rows are skipped.
var replyto = 'reply_to@email.com';
var body = 'Dear' + ' ' + name + ',' + 'nn' + text1;
var subject = 'Hello World';
GmailApp.sendEmail(recipient, subject, body, {from:'reply_to@email.com', replyto:'reply_to@email.com'});
}
}
}
注意:
- 在此修改后的脚本中,当"收件人"或"名称"不存在时,行被跳过。
- 当您发送大量电子邮件时,请小心"电子邮件读/写"的配额。您可以在这里看到它。
参考:
- getsheetbyname(name(
- Google Services的配额
如果我误解了您的问题,这不是您想要的结果,我深表歉意。