You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现Google Sheet单元格条件触发邮件的Apps Script代码修复

Google Apps Script 延迟任务邮件告警代码排查与修复

问题描述

作为编程新手,我需要编写一段Google Apps Script代码,实现当Google Sheet中「Adhoc Tasks」工作表第9列单元格值为「Delayed」时发送告警邮件。但自己编写的代码多次尝试都无法正常运行,请求协助排查问题。

原代码

function sendEmail(){

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = sheet.getSheetByName('Adhoc Tasks');

var range = sheet1.getDataRange();
var row = range.getRow();
var col = range.getColumn();
var cellValue = sheet1.getActiveCell().getValue();

var taskDescription = sheet1.getRange(row,5).getValue();

if(col == 9 && cellValue == "Delayed"){

GMailApp.sendEmail("xxxx.xxxx@gmail.com", "This is Delayed Task Alert", "Hi there, this is to notify you that the " + taskDescription + "is DELAYED");
};
}

问题分析

你的代码存在几个核心逻辑错误,导致无法正常工作:

  • 仅检查手动选中的单元格:getActiveCell()只会获取你当前选中的单元格,不会自动遍历「Adhoc Tasks」工作表第9列的所有行,只有当你选中的恰好是第9列且值为「Delayed」的单元格时,才会触发邮件。
  • 行号获取逻辑错误:range.getRow()返回的是整个数据范围的起始行(通常是表头行),不是目标单元格的实际行号,导致taskDescription获取的内容完全错误。
  • 文本拼接格式问题:邮件内容中taskDescription + "is DELAYED"缺少空格,会出现类似「任务名称is DELAYED」的错误格式。
  • 未过滤表头行:没有排除第1行的表头,可能会误把表头内容当成任务处理。

修复后的代码

下面是修正后的代码,会自动遍历「Adhoc Tasks」工作表第9列的所有行(跳过第1行表头),检查是否有值为「Delayed」的单元格,一旦发现就发送对应的告警邮件:

function sendDelayedTaskAlerts() {
  // 获取目标工作表
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('Adhoc Tasks');
  if (!sheet) {
    console.log('未找到「Adhoc Tasks」工作表');
    return;
  }

  // 获取数据范围:从第2行开始(跳过表头),取第5列(任务描述)到第9列(状态)的所有行
  const lastRow = sheet.getLastRow();
  const dataRange = sheet.getRange(2, 5, lastRow - 1, 5);
  const data = dataRange.getValues();

  const recipientEmail = "xxxx.xxxx@gmail.com";
  // 遍历每一行数据
  data.forEach((row, index) => {
    const taskDescription = row[0]; // 第5列对应数组第0位
    const status = row[4]; // 第9列对应数组第4位

    // 检查状态是否为「Delayed」且任务描述不为空
    if (status === "Delayed" && taskDescription) {
      const subject = "延迟任务告警";
      const body = `您好,特此通知:任务「${taskDescription}」已延迟。`;
      GmailApp.sendEmail(recipientEmail, subject, body);
      console.log(`已发送告警邮件:${taskDescription}`);
    }
  });
}

额外注意事项

  1. 权限授权:首次运行代码时,需要按照提示授权脚本访问你的Google Sheet和Gmail权限,完成授权后才能正常发送邮件。
  2. 设置自动触发:如果需要自动定期检查并发送告警,可通过Google Apps Script编辑器的「编辑」→「当前项目的触发器」,添加定时触发器(比如每天检查一次)或onChange触发器(当表格内容变化时触发)。
  3. 避免重复发送:如果不想重复发送同一任务的告警,可以新增一个标记列(比如第10列),发送邮件后将对应行标记为「已通知」,后续遍历跳过已标记的行。

内容的提问来源于stack exchange,提问作者Moe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:43:14