Google Sheets脚本修正:实现行跨标签迁移与删除功能
Google Apps Script 修正方案
一、表单提交自动迁移数据(修正原错误)
原代码报错原因:
- 误用
onEdit简单触发处理表单提交,表单提交需使用可安装的onFormSubmit触发器;直接运行onEdit会因缺少事件参数e,导致e.range未定义报错。 - 逻辑判断与需求不匹配:原代码判断第10列值,不符合表单提交后迁移整行的需求。
修正后的代码:
// 处理表单提交:将Form Responses的新增行迁移到Open Requests并删除源行 function moveFormResponseToOpen(e) { // 限定触发源为Form Responses工作表 const sourceSheet = e.source.getSheetByName('Form Responses'); if (!sourceSheet || e.range.getSheet().getName() !== 'Form Responses') return; const targetSheet = e.source.getSheetByName('Open Requests'); if (!targetSheet) { SpreadsheetApp.getUi().alert('未找到「Open Requests」工作表'); return; } // 获取新增行数据并追加到目标表 const rowData = e.range.getValues()[0]; targetSheet.appendRow(rowData); // 删除源表中的对应行 sourceSheet.deleteRow(e.range.getRow()); }
配置步骤:
- 保存代码后,点击编辑器顶部的时钟样式「触发器」图标。
- 点击「添加触发器」:
- 选择函数:
moveFormResponseToOpen - 部署类型:「Head」
- 事件源:「电子表格」
- 事件类型:「表单提交」
- 点击保存并完成权限授权。
- 选择函数:
二、状态改为Completed时自动迁移数据
// 处理状态变更:将Open Requests中Status为Completed的行迁移到Completed Requests function onEdit(e) { if (!e) { SpreadsheetApp.getUi().alert('请通过手动编辑单元格触发此函数,不要直接运行!'); return; } const range = e.range; const sourceSheet = range.getSheet(); // 仅处理Open Requests工作表的第10列(J列,Status列) if (sourceSheet.getName() !== 'Open Requests' || range.getColumn() !== 10) return; const statusValue = range.getValue().trim(); if (statusValue !== 'Completed') return; const targetSheet = e.source.getSheetByName('Completed Requests'); if (!targetSheet) { SpreadsheetApp.getUi().alert('未找到「Completed Requests」工作表'); return; } // 获取整行数据并追加到目标表 const rowData = sourceSheet.getRange(range.getRow(), 1, 1, sourceSheet.getLastColumn()).getValues()[0]; targetSheet.appendRow(rowData); // 删除源表中的对应行 sourceSheet.deleteRow(range.getRow()); }
注意事项:
onEdit为简单触发,无需额外配置触发器,但直接运行会因缺少事件参数报错,需通过手动编辑单元格触发。- 确保三个工作表名称完全匹配:「Form Responses」「Open Requests」「Completed Requests」,大小写、空格需完全一致。
内容的提问来源于stack exchange,提问作者Angela Lovell
相关产品推荐
相关产品推荐

