使用App Script实现表单提交后将对应答案合并至同一列
解决Google Sheets表单响应列合并与跨表迁移问题
问题说明
表单提交后,需将Responses工作表中Eng1与FR1、Eng2与FR2的内容按内容+内容格式合并,合并后列名设为Eng1&FR1、Eng2&FR2,并将处理后的数据迁移至New工作表,同时删除原Responses表中的对应行,要求全程用脚本实现,不使用公式。
原脚本问题分析
原onEdit脚本存在两个核心问题:
- 触发条件错误:依赖A列单元格变为空值触发,不符合表单提交后的自动处理逻辑
- 未实现列合并:仅直接移动单元格范围,未对Eng/FR列内容进行合并处理
修正后的脚本实现
使用onFormSubmit触发器(表单提交专用触发),实现自动合并与迁移:
function onFormSubmit(e) { // 获取表单响应工作表和目标工作表 const responseSheet = e.source.getSheetByName("Responses"); const targetSheet = e.source.getSheetByName("New"); // 获取当前提交行的全部数据 const rowValues = e.range.getValues()[0]; // 提取对应列数据(注意:数组索引从0开始,需根据实际列位置调整序号) const columnA = rowValues[0]; const eng1 = rowValues[1]; const fr1 = rowValues[2]; const eng2 = rowValues[3]; const fr2 = rowValues[4]; // 按要求合并列内容 const engFr1 = `${eng1}+${fr1}`; const engFr2 = `${eng2}+${fr2}`; // 准备写入目标表的数据行 const targetRow = [columnA, engFr1, engFr2]; // 将数据追加到目标表末尾 targetSheet.appendRow(targetRow); // 删除响应表中的原提交行 responseSheet.deleteRow(e.range.rowStart); }
脚本配置步骤
- 打开目标Google Sheets文档,点击菜单栏
扩展程序 > Apps 脚本 - 替换原脚本为上述代码,保存项目(可命名为
FormResponseMerge) - 在脚本编辑器左侧点击
触发器图标(时钟形状),选择添加触发器 - 按如下配置:
- 运行函数:
onFormSubmit - 事件源:
表单提交 - 事件类型:
来自表单 > 表单提交
- 运行函数:
- 点击
保存,完成权限授权
效果验证
原Responses表数据:
| Column A | Eng1 | FR1 | Eng2 | FR2 |
|---|---|---|---|---|
| row 1 | eng | fr | eng | fr |
| row 2 | eng | rf | eng | rf |
表单提交后,New表自动生成:
| Column A | Eng1&FR1 | Eng2&FR2 |
|---|---|---|
| row 1 | eng+fr | eng+fr |
| row 2 | eng+rf | eng+rf |
内容的提问来源于stack exchange,提问作者CJD
相关产品推荐
相关产品推荐

