You need to enable JavaScript to run this app. Google Apps Script表单发信后如何在Sheet的F列写入EMAIL_SENT标记
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script表单发信后如何在Sheet的F列写入EMAIL_SENT标记

错误原因

你的脚本存在4个核心问题导致无法写入标记:

  • 变量名不匹配:你将工作表实例赋值给了ws变量,但写入时调用了未定义的sheet变量,这是触发运行报错的直接原因
  • 索引相关变量不存在:startRange和i两个变量没有提前定义,也没有在遍历逻辑中维护行号,无法定位要写入的行
  • 数据读取范围错误:你仅读取了B到D列的数据,row数组最多只有3个元素,row[4]读取不到对应列的值,同时也覆盖不到你要写入的F列
  • 列索引错误:你要写入的F列对应工作表的第6列,原代码写的第4列是D列,列位完全不匹配

修正后可直接使用的脚本

var EMAIL_SENT = "EMAIL_SENT";

function sendMail() {
  // 列索引对应读取范围:B列=0,C列=1,D列=2,F列=4(读取范围从B开始计算偏移)
  var emailCol = 0;
  var nameCol = 1;
  var phoneCol = 2;
  var sentFlagCol = 4; 

  var emailTemp = HtmlService.createTemplateFromFile("email");
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("form1");
  // 读取范围扩展到F列,保证能读取已发送标记、支持写入标记
  var data = ws.getRange("B2:F" + ws.getLastRow()).getValues();

  // 遍历的时候带上索引i,用来定位对应行
  data.forEach(function(row, i){
    // 已经发送过的直接跳过
    if (row[sentFlagCol] == EMAIL_SENT) return;
    
    emailTemp.fullname = row[nameCol];
    emailTemp.phone = row[phoneCol];
    var htmlMessage = emailTemp.evaluate().getContent();

    GmailApp.sendEmail(
      row[emailCol],
      "Thank you!",
      "Your email doesn't support HTML.",
      {name: "Email App", htmlBody: htmlMessage}
    );

    // 定位到对应行的F列写入标记:行号是2+i(因为数据从第二行开始读取),列号是6(F列是工作表第6列)
    ws.getRange(2 + i, 6).setValue(EMAIL_SENT);
    SpreadsheetApp.flush();
  });
}

注意事项

如果后续你的表格列结构有调整,只需要修改对应列的索引数值即可,原来配置的On form submit触发条件无需改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:12:01