基于Google表单选项配置Drive指定上传文件夹的脚本修改求助
修改后的脚本及说明
以下是修正后的脚本,可实现根据表单选择的GB/BN选项,将上传文件存入对应Drive文件夹:
function onFormSubmit(e) { // 从事件对象直接获取当前提交的响应,无需遍历所有响应 const itemResponses = e.response.getItemResponses(); // 声明文件夹ID变量,解决作用域问题 let folderId; // 根据表单选项值(GB/BN)匹配对应文件夹ID // 注意:getResponse()返回的是选项显示文本,需和表单中选项完全一致 const selectedOption = itemResponses[0].getResponse(); if (selectedOption === "GB") { folderId = "1GlmowOXhttkdBHPYHuTUM3uLcZmND8xR7W7T_7GJmIdwkibEW4HlrDoSBKk_CLnofjJ8fxji"; } else if (selectedOption === "BN") { folderId = "1IayOn5hqvy1VO3gHas-rnO0rbssSG4T1"; } else { // 处理未预期的选项,可根据需要添加日志或提示 console.log("未识别的选项:" + selectedOption); return; } // 获取目标文件夹 const destFolder = DriveApp.getFolderById(folderId); // 遍历所有文件上传字段,将文件移动到目标文件夹 // 跳过第一个选项字段,处理后续所有文件上传字段 itemResponses.forEach((itemResp, index) => { if (index === 0) return; const fileIds = itemResp.getResponse(); if (fileIds && fileIds.length > 0) { fileIds.forEach(fileId => { DriveApp.getFileById(fileId).moveTo(destFolder); }); } }); }
关键修改点说明
- 事件对象优化:直接用
e.response获取当前提交的响应,替代原脚本遍历所有响应的方式,避免并发提交时的错误,执行更高效。 - 变量作用域修复:将
folderId声明在if语句外部,确保后续代码能正常访问该变量,解决原脚本中destFolder无法获取ID的问题。 - 选项判断修正:直接匹配表单选项的实际文本(GB/BN),而非原脚本的数字判断,完全贴合表单的实际设置。
- 文件上传处理优化:通过遍历跳过选项字段后的所有字段处理文件上传,无需硬编码字段索引,适配后续表单字段的调整。
- 错误防护:添加未预期选项的判断逻辑,避免无意义的代码执行。
额外注意事项
- 确保表单中选项字段是第一个字段(对应脚本中的
itemResponses[0]),如果后续调整了字段顺序,需同步修改索引值。 - 确认填入的文件夹ID正确无误,且脚本拥有对应文件夹的编辑权限。
- 需为表单绑定触发器:打开脚本编辑器后,点击「编辑」→「当前项目的触发器」,添加一个表单提交类型的触发器,关联该函数。
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

