如何修改Google Sheets脚本实现单元格满足指定条件时自动发送邮件
Google Sheets 自动发邮脚本修复方案
你使用的示例表单:Google Sheets表单示例
需求为I列计算值大于2且K列为空时自动触发邮件通知,原有脚本可按以下内容修改:
原有脚本存在的问题
- 直接获取整列值返回的是二维数组,无法直接用于数值比较、空值判断,也无法直接拼接进邮件内容
- 没有逐行校验匹配规则,不符合逐行判断的需求
- 没有去重逻辑,同一行符合条件时会重复发送邮件
修复后完整代码
function sendEmail() { var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Workable"); // 获取表格实际有数据的最后一行,避免遍历整列浪费性能 var lastRow = sheet.getLastRow(); // 批量获取B、I、K、M列数据(M列为辅助列,用于标记邮件是否已发送,避免重复发信) var rangeData = sheet.getRange(2, 2, lastRow - 1, 12).getValues(); // 从第2行开始跳过表头,取B到M列数据 var email_address = 'allyson@hipcamp.com'; var subject = 'New Listing Flagged'; for (var i = 0; i < rangeData.length; i++) { var row = rangeData[i]; var listingId = row[0]; // B列对应索引0 var flagCount = row[7]; // I列对应索引7 var actionType = row[9]; // K列对应索引9 var sendFlag = row[10]; // M列对应索引10,记录是否已发邮件 // 满足I>2、K为空、未发送过邮件三个条件时发信 if (flagCount > 2 && actionType == "" && sendFlag != "已发送") { var message = 'Listing ' + listingId + ' has been flagged. Please resolve ASAP in the QA Google Sheet. Thank you!'; MailApp.sendEmail(email_address, subject, message); // 发信后给对应行M列打标记,避免重复发信 sheet.getRange(i + 2, 13).setValue("已发送"); } } }
后续配置要求
- 脚本保存后,首次运行需要按提示授权,允许脚本访问你的表格和调用邮箱发信权限
- 需要添加可安装触发器:在Apps Script编辑器左侧点击「触发器」→「添加触发器」,选择
sendEmail函数,事件来源选择「电子表格」,事件类型选择「编辑」,保存后即可实现修改C-H列数据时自动校验规则触发邮件。
内容的提问来源于stack exchange,提问作者Allyson
相关产品推荐
相关产品推荐

