如何收集Google Form响应并写入另一工作表指定单元格后删除响应表
实现思路
- 动态关联匹配:不需要依赖响应表固定名称,通过表单实例的
getDestinationId()获取绑定的电子表格ID,再遍历电子表格内所有工作表,匹配getFormUrl()返回的地址和当前表单地址,即可精准定位当前表单对应的响应表。 - 触发逻辑适配批量场景:创建表单时直接为每个表单绑定表单提交可安装触发器,触发后自动执行迁移逻辑,不需要手动配置每个响应表的监听。
- 可配置映射规则:将源响应列、目标工作表、目标写入列都抽成配置项,批量创建时可针对不同表单单独传参,适配不同业务需求。
- 解绑删除逻辑:迁移完成后先调用表单的
removeDestination()方法解除关联,再删除响应工作表,避免删除时报关联错误。
代码参考
以下代码可直接对接你已有的表单创建逻辑:
1. 表单创建阶段新增触发器绑定逻辑
在你原有创建表单、关联电子表格的代码后,新增以下内容,为每个新建表单自动绑定提交触发事件:
// 这里是你原有创建表单、关联表格的逻辑 // const form = FormApp.create('你的表单名称'); // const targetSS = SpreadsheetApp.openById('你的总电子表格ID'); // form.setDestination(FormApp.DestinationType.SPREADSHEET, targetSS.getId()); // 新增:为当前表单绑定提交触发器,触发后自动执行迁移逻辑 ScriptApp.newTrigger('handleFormSubmit') .forForm(form) .onFormSubmit() .create();
2. 核心提交处理函数
function handleFormSubmit(e) { // ========== 可配置项,根据实际需求修改 ========== const TARGET_SHEET_NAME = "C"; // 要写入数据的目标工作表名称 const SOURCE_COLUMNS = [1, 2, 3]; // 从响应表读取的列号,A=1、B=2以此类推 const TARGET_COLUMNS = [6, 7, 8]; // 写入目标表的对应列号,F=6、G=7以此类推 // ============================================== const currentForm = e.source; // 获取表单绑定的电子表格实例 const bindSSId = currentForm.getDestinationId(); const ss = SpreadsheetApp.openById(bindSSId); // 精准匹配当前表单对应的响应表,不依赖表名 let responseSheet = null; const allSheets = ss.getSheets(); for (const sheet of allSheets) { if (sheet.getFormUrl() === currentForm.getEditUrl()) { responseSheet = sheet; break; } } if (!responseSheet) throw new Error("未匹配到对应响应表"); // 读取响应表最新提交的对应列数据 const lastResponseRow = responseSheet.getLastRow(); const writeValues = SOURCE_COLUMNS.map(col => responseSheet.getRange(lastResponseRow, col).getValue()); // 写入目标工作表 const targetSheet = ss.getSheetByName(TARGET_SHEET_NAME); if (!targetSheet) throw new Error("目标工作表不存在"); // 此处默认追加到目标表最后一行,需要写固定行的话可自行修改targetWriteRow的取值 const targetWriteRow = targetSheet.getLastRow() + 1; TARGET_COLUMNS.forEach((col, index) => { targetSheet.getRange(targetWriteRow, col).setValue(writeValues[index]); }); // 解绑表单与响应表,删除响应表 currentForm.removeDestination(); ss.deleteSheet(responseSheet); }
使用说明
- 批量创建不同规则的表单时,可将配置项通过
PropertiesService存储,或在绑定触发器时传入参数,不需要为每个表单单独写处理函数。 - 首次运行需要授权,确保脚本拥有表单和电子表格的编辑权限。
- 你描述的示例场景可直接使用默认配置,无需修改映射规则即可生效。
内容的提问来源于stack exchange,提问作者banksie
相关产品推荐
相关产品推荐

