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('已发送'); }
二、设置自动触发(新增行时自动运行)
- 打开Google Sheets的脚本编辑器(顶部菜单栏:工具 > 脚本编辑器)
- 点击左侧菜单栏的时钟图标(触发器)
- 点击添加触发器按钮,设置以下参数:
- 选择要运行的函数:
sendOnlyLastRowEmail - 部署类型:
Head - 事件源:
从电子表格 - 事件类型:
更改
- 选择要运行的函数:
- 点击保存,按提示完成脚本权限授权
此后当Sheet1新增行(查询填充或手动添加)时,脚本会自动检查最后一行是否未发送,仅发送该行对应的邮件。
内容的提问来源于stack exchange,提问作者user21183067
相关产品推荐
相关产品推荐

