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

如何在自定义网页表单数据录入Google Sheets时自动运行指定脚本

解决方案

问题根源

Google Sheets内置的OnSubmit触发器仅适用于绑定了Google Forms的表格,你通过自定义Web App写入表格的数据不会触发该事件,因此之前的配置失效。

最优实现方案

直接在Web App写入数据的逻辑后调用发邮件函数,无需依赖触发器,稳定性更高,实现步骤如下:

  1. 统一表格名称配置:你现有发邮件脚本读取的表名为form1,但Web App写入的表名为Leads,请先将两者改为一致,推荐将发邮件脚本中的表名修改为Leads,和Web App配置对齐。
  2. 优化发邮件脚本(可选,提升运行效率):修改为仅处理新写入的行,避免每次遍历全表数据,代码如下:
function sendMail(newRowNum) {
  const emailTemp = HtmlService.createTemplateFromFile("email");
  // 此处表名请和实际存储数据的表名保持一致
  const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Leads");
  // 仅读取新写入的单行数据
  const newRow = sh.getRange(newRowNum, 2, 1, sh.getLastColumn() - 1).getValues()[0];
  
  emailTemp.first = newRow[2];
  emailTemp.last = newRow[3];
  emailTemp.phone = newRow[9];
  const htmlMessage = emailTemp.evaluate().getContent();
  const emailSent = newRow[11];
  if (emailSent != "EMAIL_SENT") {
    GmailApp.sendEmail(
      newRow[1],
      "Thank you!",
      "Your email doesn't support HTML.",
      { name: "Email App", htmlBody: htmlMessage }
    );
    sh.getRange(newRowNum, 13).setValue("EMAIL_SENT");
  }
}
  1. 修改Web App的handleResponse函数,在数据写入完成后调用发邮件逻辑:找到代码中sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);行,在该行下方新增一行sendMail(nextRow);即可。
  2. 重新部署Web App:修改完代码后点击「部署」-「新建部署」,类型选择Web应用,执行身份选择你自己,访问权限设置为「所有人,包括匿名用户」,部署完成后复制新生成的Web App URL,替换你网站前端脚本中的旧请求URL。

备选方案(使用可安装触发器)

如果不想修改现有Web App代码,可配置可安装的onChange触发器:

  • 打开表格对应的Apps Script项目,点击左侧「触发器」-「添加触发器」
  • 选择要运行的函数为sendMail,事件来源选择「电子表格」,事件类型选择「变更」,保存后授权对应权限即可。
    注意该方案可能因表格其他变更操作误触发,不如直接调用逻辑稳定。

注意事项

  • 确保你的Apps Script项目中存在名为email的HTML模板文件,否则会报错。
  • 确认发邮件脚本中的列索引和你实际表格的列对应,避免取错收件人、用户名称等信息。
  • 发邮件权限需要和Web App的执行身份一致,确保执行身份的Gmail账户有发送邮件的权限。

内容的提问来源于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 20:00:02