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

如何针对表单最后一条提交记录发送含预测试结果的邮件?

解决仅发送邮件给最新表单提交记录的问题

嘿,作为编程新手遇到这种问题太正常了!你现在的代码里固定了行号,没法自动定位到最新的表单提交记录,我来帮你调整代码,实现只给最后一条提交的学生发包含预测试结果的邮件。

完整解决方案代码

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // 获取表格中最后一行有数据的行号(自动适配新提交的记录)
  var lastRow = sheet.getLastRow();
  
  // 提取最后一行的所有数据:参数是(起始行, 起始列, 行数, 列数)
  var dataRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn());
  // 把二维数组转为一维数组,方便直接取每一列的值
  var rowData = dataRange.getValues()[0];
  
  // -------------------------- 这里需要你根据自己的表格调整! --------------------------
  // 假设第3列是学生邮箱(数组索引从0开始,所以第3列对应索引2)
  var studentEmail = rowData[2];
  // 假设第6列是预测试结果(对应索引5,改成你实际存放结果的列索引)
  var testResult = rowData[5];
  // -----------------------------------------------------------------------------------
  
  // 邮件主题和内容
  var emailSubject = "你的预测试结果已送达";
  var emailBody = `
  同学你好!
  
  你的预测试结果如下:
  *${testResult}*
  
  感谢你参与预测试,祝你学习顺利!
  `;
  
  // 发送邮件
  MailApp.sendEmail(studentEmail, emailSubject, emailBody);
  
  // 可选:给已发送的行加标记,避免重复发送(在表格最后一列添加"已发送")
  sheet.getRange(lastRow, sheet.getLastColumn() + 1).setValue("已发送邮件");
}

关键步骤解释

  • 自动定位最后一行:用sheet.getLastRow()代替固定的startRow,不管表单新增多少条记录,都能精准拿到最新的那一行
  • 提取整行数据:getRange(lastRow, 1, 1, sheet.getLastColumn())会获取最后一行从第1列到最后一列的所有数据,不用手动指定列数
  • 列索引注意事项:数组的索引是从0开始的!比如表格里的第1列对应rowData[0],第3列对应rowData[2],一定要根据你自己的表格结构调整这里的数字
  • 邮件内容优化:用反引号`包裹的模板字符串,可以直接插入变量,排版更清晰;用*包裹测试结果还能让内容更突出
  • 避免重复发送:最后一行的标记功能可以帮你知道哪些记录已经发过邮件,防止误操作重复发送

新手额外提示

  1. 测试脚本:先在表格里手动添加一行测试数据(填好邮箱和测试结果),然后运行脚本,检查对应的邮箱是否收到邮件
  2. 设置自动触发:如果想让表单提交后自动发送邮件,在脚本编辑器里点击「编辑」→「当前项目的触发器」,添加一个触发器:
    • 选择sendEmails函数
    • 触发事件选「表单提交」
    • 保存后,每次有新的表单提交,脚本就会自动运行啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:13