如何用Apps Script实现Spreadsheet满足指定条件时自动发送邮件?
代码问题修复与功能实现
现有代码错误说明
getRange("C2:C10").getValues()返回结果为二维数组,直接与数值2比较的逻辑永远不成立,外层if判断始终不触发,后续代码无法执行- 年龄校验逻辑放在for循环外部,未逐行判断每行的鱼龄是否达标,一旦触发会无差别给所有管理员发邮件,不符合需求
- 重复调用
getActiveSpreadsheet()、getSheetByName()获取同一表格对象,执行效率低下
修复后可运行代码
function fishalert() { // 提前获取工作表对象,减少重复调用开销 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); const subject = '鱼龄超期提醒'; // 自动获取表格所有有内容的范围,不用手动写死适配表格行数变动 const allRowData = sheet.getDataRange().getValues(); // 从第2行开始遍历(跳过表头行,数组下标从0开始所以i初始值为1) for (let i = 1; i < allRowData.length; i++) { const currentRow = allRowData[i]; const lineName = currentRow[0]; // A列:品系名称 const fishAge = Number(currentRow[2]); // C列:鱼龄,做数值转换避免表格格式导致的判断错误 const adminEmail = currentRow[3]; // D列:管理员邮箱 // 仅当鱼龄超2年且存在有效邮箱时发信 if (fishAge > 2 && adminEmail) { const message = `品系${lineName}的鱼龄已超过2年,请及时处理`; MailApp.sendEmail(adminEmail, subject, message); } } }
自动触发配置步骤
- 打开对应Google表格,点击菜单栏「扩展程序」→「Apps Script」进入脚本编辑器
- 编辑器左侧点击「触发器」(时钟形状图标)
- 点击右下角「添加触发器」按钮
- 选择运行函数为
fishalert,事件源选「时间驱动」,根据你的需求选择触发频率(推荐每日触发一次即可满足日常检测需求) - 保存后按提示完成授权,即可实现自动检测发信
内容的提问来源于stack exchange,提问作者Hotaru
相关产品推荐
相关产品推荐

