如何在Google Sheet中设置整列条件触发的邮件告警?
Google Sheets 整列监控域名到期告警解决方案
我完全懂你现在的痛点——复制代码逐个监控单元格效率太低了,咱们直接修改代码实现整列批量监控,还能让告警邮件更实用。
修改后的完整代码
function CheckDomainExpiry() { // 获取域名列表工作表对象 const domainSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("domain list"); // 动态获取F列有数据的范围(从F2到最后一行) const lastRow = domainSheet.getLastRow(); const expiryDaysRange = domainSheet.getRange(`F2:F${lastRow}`); const expiryDays = expiryDaysRange.getValues(); // 同时获取对应的域名(A列),让告警邮件更明确 const domainNamesRange = domainSheet.getRange(`A2:A${lastRow}`); const domainNames = domainNamesRange.getValues(); // 收集即将到期的域名 const expiringDomains = []; expiryDays.forEach(([daysLeft], index) => { // 确保单元格是数字且剩余天数小于2 if (typeof daysLeft === 'number' && daysLeft < 2) { expiringDomains.push(domainNames[index][0]); } }); // 只有存在到期域名时才发送邮件 if (expiringDomains.length > 0) { // 获取收件人邮箱列表,处理成一维数组并过滤空值 const emailSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Company emails"); const emailLastRow = emailSheet.getLastRow(); const emailAddresses = emailSheet.getRange(`B2:B${emailLastRow}`) .getValues() .flat() // 把二维数组转成一维 .filter(email => email.trim() !== ''); // 过滤空邮箱 // 组装邮件内容 const message = `以下域名将在2天内到期,请及时处理:\n\n${expiringDomains.join("\n")}\n\n请查看「domain list」工作表确认详细信息。`; const subject = '⚠️ 域名即将到期告警'; // 发送告警邮件 MailApp.sendEmail(emailAddresses, subject, message); } }
关键修改说明
- 动态适配数据范围:用
getLastRow()获取工作表最后一行数据的行号,代替固定的行号(比如F54),新增域名时不需要修改代码,自动覆盖所有行。 - 批量遍历检查:通过
forEach循环遍历整列的剩余天数,逐个判断是否小于2,不用再复制多份代码。 - 告警信息更精准:同时获取A列的域名,把即将到期的域名列在邮件里,收件人能直接知道要处理哪个域名,不用再翻表格找。
- 优化邮箱列表处理:用
flat()把二维数组转成一维(getValues()返回的是二维数组),再过滤空邮箱,避免因为空单元格导致邮件发送失败。 - 条件触发邮件:只有当确实有到期域名时才发送邮件,避免每天收到无意义的空告警。
额外建议
记得给这个脚本设置时间驱动触发器,让它每天自动运行:
- 打开Google Sheet,点击顶部菜单栏「扩展程序」→「Apps脚本」
- 在脚本编辑器界面,点击左侧「触发器」图标(闹钟形状)
- 点击「添加触发器」,设置触发事件为「时间驱动」,选择「每天」,设置合适的运行时间(比如上午9点)
这样你就不用手动执行脚本,每天自动监控域名到期情况啦!
内容的提问来源于stack exchange,提问作者user3526312
相关产品推荐
相关产品推荐

