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

如何识别绑定到同一张Google Sheet的多个Google Form提交来源

解决方案

你不需要拆分当前Google Sheet,可通过以下两种方式过滤onFormSubmit触发事件,实现数据分流:


方案1:通过提交数据的目标标签过滤(推荐)

onFormSubmit事件对象的range属性对应新提交数据写入的单元格范围,调用range.getSheet()即可获取数据写入的标签对象,匹配标签名称即可判断提交来源,实现分流。
修改后的参考代码如下:

// These are the Database connections values
var user = 'dbUsername';
var userPwd = 'dbPassword';
var db = 'databaseName';
var dbUrl = 'jdbc:mysql://192.168.0.0:3306/' + db;

// 配置标签名与对应写入逻辑的映射
const SHEET_CONFIG = {
  "表单1对应的标签名": {
    table: "test_google_forms_1",
    fields: ["Color1", "Number1"]
  },
  "表单2对应的标签名": {
    table: "test_google_forms_2",
    fields: ["Department", "StaffName"]
  }
}

function onFormSubmit(e) {
  // 获取本次提交数据写入的标签名称
  const targetSheetName = e.range.getSheet().getName();
  // 不在配置内的标签提交直接跳过
  if (!SHEET_CONFIG.hasOwnProperty(targetSheetName)) return;

  const config = SHEET_CONFIG[targetSheetName];
  // 按配置提取对应字段值
  const values = config.fields.map(field => e.namedValues[field][0]);
  // 写入对应MySQL表
  writeToTable(config.table, config.fields, values);
}

function writeToTable(tableName, fields, values) {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  // 动态拼接预处理SQL
  const placeholders = values.map(() => '?').join(',');
  const fieldStr = fields.map(f => `\`${f}\``).join(',');
  var stmt = conn.prepareStatement(`INSERT INTO ${tableName} (${fieldStr}) values (${placeholders})`);
  // 批量绑定参数
  values.forEach((val, idx) => stmt.setString(idx+1, val));
  stmt.execute();
  // 关闭连接避免资源占用
  stmt.close();
  conn.close();
}

如果担心标签被重命名导致匹配失效,也可以用标签ID匹配,调用e.range.getSheet().getSheetId()获取标签ID做配置即可。


方案2:通过表单独有问题字段过滤

如果每个绑定的表单都有独有的问题字段,也可以通过检查e.namedValues中是否存在对应独有字段来判断提交来源:

function onFormSubmit(e) {
  // 表单1独有问题为Color1
  if (e.namedValues.hasOwnProperty('Color1')) {
    const color = e.namedValues['Color1'][0];
    const number = e.namedValues['Number1'][0];
    writeColor(color, number);
  } 
  // 表单2独有问题为Department
  else if (e.namedValues.hasOwnProperty('Department')) {
    const dept = e.namedValues['Department'][0];
    const name = e.namedValues['StaffName'][0];
    writeDeptStaff(dept, name);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:57:02