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

Google Sheets指定工作表双单元格条件触发自动发邮件的脚本问题

Google Apps Script 触发邮件功能修正方案

原代码核心问题

  • 未做工作表范围限制:任意工作表的编辑操作都会触发脚本执行,不符合仅在inbound schedule表生效的要求
  • 逻辑判断存在语法错误:误用位运算符&代替逻辑与运算符&&,且条件组合优先级错误,触发条件完全偏离需求
  • 缺少基础容错:单元格清空等场景下事件对象的value字段为undefined,会直接导致脚本报错终止
  • 冗余API调用:判断第2列值时单独调用getValue()接口,增加脚本运行耗时和出错概率

修正后完整代码

function sendMailEdit3(e) {
  // 事件对象空值容错
  if (!e || !e.range) return;
  const activeSheet = e.source.getActiveSheet();
  // 限定仅目标工作表生效
  if (activeSheet.getName() !== "inbound schedule") return;
  // 限定仅编辑第3列(C列)时继续执行
  if (e.range.columnStart !== 3) return;
  // 限定编辑后单元格值为Yes时继续执行
  if (e.value !== "Yes") return;

  // 拉取当前编辑行前10列的完整数据
  const currentRowData = activeSheet.getRange(e.range.rowStart, 1, 1, 10).getValues()[0];
  // 判定同行第2列(B列)值为200,兼容文本格式存储的数值
  if (Number(currentRowData[1]) !== 200) return;

  // 组装邮件内容
  const transferOrderNum = currentRowData[3];
  const warehouseCode = currentRowData[1];
  const triggerTime = new Date().toLocaleString("en-US");
  const mailBody = `Transfer Order ${transferOrderNum} is ready for pickup for warehouse ${warehouseCode} as of ${triggerTime}`;

  // 发送邮件,此处请替换为实际收件人邮箱
  GmailApp.sendEmail("替换为实际收件邮箱地址", "Transfer Order Ready for Pickup", mailBody);
}

部署说明

  • 脚本保存后,需要在Apps Script编辑器的「触发器」页面新建可安装编辑触发器,绑定函数为sendMailEdit3,触发事件选择「编辑时」
  • 代码中收件人邮箱位置请替换为实际接收通知的邮箱地址,若需要给多人发信可填入用逗号分隔的多个邮箱
  • 若表格中调拨单号、仓库编号所在列有调整,修改currentRowData对应的数组索引即可(数组索引从0开始,对应列数=索引+1)

内容的提问来源于stack exchange,提问作者Lupe.2018

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:39:22