如何将Google Sheet脚本的每行邮件告警合并为每个工作表1封邮件?
优化Google Sheet邮件告警脚本:每个工作表仅发一封汇总邮件
修改后的完整代码
function feedbackAlert() { var today = new Date(); var todayMonth = today.getMonth() + 1; var todayDay = today.getDate(); var todayYear = today.getFullYear(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var only = [ 'Sheet 1', 'Sheet 2', 'Sheet 3' ]; only.forEach(function(name){ var s = ss.getSheetByName(name); var startRow = 14; var numRows = 100; var dataset = s.getRange(startRow, 1, numRows, 999); var value = dataset.getValues(); var productName = s.getRange("C5").getValue(); // 初始化工作表专属的汇总消息和主题 var subject = 'NPD Feedback is Due: ' + productName; var summaryMessage = '📢 Feedback is Due - ' + productName + '\n\n'; var hasAlert = false; for (var u = 0; u < value.length; ++u) { var row = value[u]; // 跳过空行(避免无效数据) if (!row[5]) continue; var dueDate = new Date(row[5]); var dueDateMonth = dueDate.getMonth() + 1; var dueDateDay = dueDate.getDate(); var dueDateYear = dueDate.getFullYear(); if (dueDateMonth === todayMonth && dueDateDay === todayDay && dueDateYear === todayYear) { hasAlert = true; var dueDateFormat = Utilities.formatDate(dueDate, 'ET', 'MM/dd/yyyy'); // 将当前符合条件的行追加到汇总消息中 summaryMessage += 'Name: ' + row[1] + '\n' + 'Formula #: ' + row[2] + '\n' + 'Feedback Due Date: ' + dueDateFormat + '\n\n'; } } // 只有当有符合条件的告警时才发送邮件 if (hasAlert) { MailApp.sendEmail('your-email@example.com', subject, summaryMessage); Logger.log('NPD Feedback Alert sent for ' + productName); } }) }
关键优化点
- 汇总消息存储:在每个工作表的遍历开始前,初始化
summaryMessage变量,用来累积所有符合条件的行内容,而非每找到一行就发邮件。 - 空行过滤:添加
if (!row[5]) continue;跳过无截止日期的空行,避免无效处理。 - 日期对象复用:仅创建一次
dueDate对象,避免重复解析日期,提升脚本运行效率。 - 条件发送:用
hasAlert标记是否存在需告警内容,遍历完所有行后统一发送邮件,确保每个工作表最多发送一封告警邮件。
内容的提问来源于stack exchange,提问作者Shiki
相关产品推荐
相关产品推荐

