如何制作表单在不公开Google Sheet时更新指定行对应列的任务状态
解决方案
你需要搭配绑定到Google Sheet的Google Apps Script实现按公寓号更新对应列的需求,具体操作步骤如下:
步骤1:调整Google Form字段
- 保留两个必填字段即可:
- 第一个为下拉选择框,选项和Sheet A列的公寓号完全一致,数量少可以手动填写,数量多可以后续用脚本同步选项
- 第二个为单选/下拉选择框,选项对应你要标记完成的任务:比如
木工(对应B列)、管道工(对应D列)、对应F列的任务名称,可根据需求设置为支持多选单次提交多个任务完成状态
步骤2:在Google Sheet中配置自动运行脚本
- 打开你的目标Google Sheet,点击顶部菜单栏「扩展程序」-「Apps 脚本」,进入脚本编辑页面
- 删除默认的空函数,粘贴如下代码,按照代码内注释调整适配你自己的表格配置:
function onFormSubmit(e) { // 取表单提交数据 const formData = e.values; // 此处索引要和你的表单字段顺序对应,e.values第一个值固定为提交时间,第二个值为第一个表单字段的内容 const targetFlat = formData[1]; const finishedTask = formData[2]; // 获取目标表格数据,引号内替换为你自己的Sheet工作表名称 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); const allFlatList = sheet.getRange('A:A').getValues().flat(); // 匹配目标公寓号对应的行号 const targetRow = allFlatList.indexOf(targetFlat) + 1; // 没匹配到对应公寓号直接终止运行 if (targetRow < 2) return; // 任务和对应列的映射,数字为列的序号,B列是2、D列是4、F列是6,可自行调整 const taskToCol = { "木工": 2, "管道工": 4, "你自己的F列对应任务名": 6 }; // 给对应位置打标记,如果你表格对应列已经设置了复选框格式,把'✅'替换成true即可 if (taskToCol[finishedTask]) { sheet.getRange(targetRow, taskToCol[finishedTask]).setValue('✅'); } }
步骤3:绑定表单提交触发规则
- 在脚本编辑器页面,点击左侧「触发器」按钮(闹钟样式图标)
- 点击右下角「添加触发器」,按如下规则设置:
- 选择要运行的函数:
onFormSubmit - 选择事件来源:
电子表格 - 选择事件类型:
表单提交时 - 保存后按照页面提示完成权限授权即可
- 选择要运行的函数:
步骤4:关闭表单默认新增行功能
- 回到你的Google Sheet,点击顶部「表单」-「取消表单链接」,即可关闭表单提交自动新增行的默认逻辑,所有数据修改都会由你设置的脚本自动完成
权限控制说明
- 不需要公开Sheet的编辑权限,仅需将表单设置为「有链接即可提交」即可,所有数据修改由脚本自动执行
- 如果需要限制提交人员范围,可以开启表单的「仅组织内用户可提交」设置,也可以在表单开头增加密码验证字段,在脚本中判断密码正确再执行更新逻辑
内容的提问来源于stack exchange,提问作者Demotry
相关产品推荐
相关产品推荐

