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

Google Sheets发送邮件脚本问题:重复发全行+需自动化触发

解决Google Sheets脚本重复发送所有行邮件的问题

一、修改脚本仅发送最后一行内容

原脚本的核心问题是用for循环遍历了所有行,导致每次运行都会发送全量邮件。我们直接定位最后一行数据,同时新增标记列避免重复发送:

function sendOnlyLastRowEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('Sheet1');
  var sheet2 = ss.getSheetByName('Sheet2');
  
  var lastRow = sheet1.getLastRow();
  // 跳过表头,确保存在有效数据行
  if (lastRow < 2) return;
  
  // 用第7列(G列)标记是否已发送,避免重复触发
  var isSent = sheet1.getRange(lastRow, 7).getValue();
  if (isSent === '已发送') return;
  
  var subject = sheet2.getRange(2, 1).getValue();
  // 一次性获取最后一行的所有数据,提升效率
  var rowData = sheet1.getRange(lastRow, 1, 1, 6).getValues()[0];
  var Name = rowData[0];
  var emailAddress = rowData[1];
  var Title = rowData[2];
  var Level = rowData[3];
  var HM = rowData[4];
  var Location = rowData[5];
  
  var message = sheet2.getRange(2, 2).getValue();
  message = message.replace("<Name>", Name)
                   .replace("<Title>", Title)
                   .replace("<Level>", Level)
                   .replace("<HM>", HM)
                   .replace("<Location>", Location);
  
  MailApp.sendEmail(emailAddress, subject, message);
  // 标记该行已发送
  sheet1.getRange(lastRow, 7).setValue('已发送');
}

二、设置自动触发(新增行时自动运行)

  1. 打开Google Sheets的脚本编辑器(顶部菜单栏:工具 > 脚本编辑器)
  2. 点击左侧菜单栏的时钟图标(触发器)
  3. 点击添加触发器按钮,设置以下参数:
    • 选择要运行的函数:sendOnlyLastRowEmail
    • 部署类型:Head
    • 事件源:从电子表格
    • 事件类型:更改
  4. 点击保存,按提示完成脚本权限授权

此后当Sheet1新增行(查询填充或手动添加)时,脚本会自动检查最后一行是否未发送,仅发送该行对应的邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:10:15