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

AppScript生成表单对应工作表重命名及响应汇总到总表咨询

Google 表单批量生成场景下的响应数据存储解决方案

需求1:自动重命名新生成的表单对应工作表

原生setDestination方法会自动在目标电子表格中新增对应工作表,你可以在设置完目标表格后,直接捕获最新生成的工作表完成重命名,参考代码如下:

const destination = SpreadsheetApp.openById('你的电子表格ID');
form.setDestination(FormApp.DestinationType.SPREADSHEET, destination.getId());
// 确保前面的写入操作生效
SpreadsheetApp.flush();
// 自定义工作表名称,可按你自己的规则拼接,比如表单ID+表单名称
const customSheetName = `${form.getId()}_${form.getTitle()}`;
// 新增的工作表默认排在所有工作表末尾,直接取最后一个即可
const newResponseSheet = destination.getSheets()[destination.getSheets().length - 1];
newResponseSheet.setName(customSheetName);

注意:如果存在短时间内批量创建大量表单的场景,可添加1-2秒的延迟避免工作表读取顺序错误

需求2:所有表单响应统一写入同一个总表

原生setDestination不支持多表单共享同一个响应工作表,你可以改用「表单提交触发器+自定义写入逻辑」实现该需求,不需要调用setDestination方法,实现步骤如下:

  1. 编写表单提交事件的处理函数,统一将响应写入总表
  2. 批量创建表单时,为每个表单绑定提交触发器

参考代码

表单创建阶段绑定触发器

// 批量创建表单的逻辑中,创建完表单实例后添加下面的代码
ScriptApp.newTrigger("handleFormSubmit")
  .forForm(form)
  .onFormSubmit()
  .create();

响应提交处理函数

function handleFormSubmit(e) {
  // 替换为你的总表ID和总表工作表名称
  const SUMMARY_SPREADSHEET_ID = "你的总表ID";
  const TARGET_SHEET_NAME = "响应总表";
  const targetSheet = SpreadsheetApp.openById(SUMMARY_SPREADSHEET_ID).getSheetByName(TARGET_SHEET_NAME);
  // 获取本次提交的所有数据
  const response = e.response;
  const itemResponses = response.getItemResponses();
  // 组装行数据,可按需添加表单标识字段方便区分不同表单的提交
  const outputRow = [
    response.getTimestamp(), // 提交时间
    e.source.getTitle(), // 所属表单名称
    e.source.getId(), // 所属表单ID
    ...itemResponses.map(item => item.getResponse()) // 按顺序返回所有问题的答案
  ];
  // 写入总表最后一行
  targetSheet.appendRow(outputRow);
}

注意:独立脚本需要持有所有表单和目标电子表格的编辑权限,触发器创建有单日配额限制,批量生成前请确认配额余量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:30:02