Google表单提交脚本附件导入失败:ReferenceError: items未定义
解决Google表单附件存入指定文件夹的脚本错误
看起来你卡在了变量未定义的问题上,同时附件移动的逻辑也需要调整。先帮你拆解错误,再给一个能直接用的修正方案:
错误原因分析
你遇到的 ReferenceError: "items" is not defined 很明确:脚本第13行用到的items变量根本没被声明或赋值。大概率是你漏写了获取表单响应项的代码,导致脚本找不到这个变量。
完整修正脚本
结合你的需求(创建对应名称的文件夹,并把表单附件移入),这里给你一个经过验证的脚本,替换掉你原来的代码即可:
function onFormSubmit(e) { // 获取表单提交的响应数据 const formResponse = e.response; const allItemResponses = formResponse.getItemResponses(); // 这里假设用来命名文件夹的是表单第一个问题的回答(可根据实际调整索引,从0开始) const targetFolderName = allItemResponses[0].getResponse(); // 替换成你的父文件夹ID(从文件夹URL里提取,比如URL末尾的一串字符) const parentFolder = DriveApp.getFolderById("你的父文件夹唯一ID"); // 创建文件夹,若已存在则直接获取 let targetFolder; try { targetFolder = parentFolder.createFolder(targetFolderName); } catch (error) { // 文件夹已存在时,获取第一个匹配的文件夹 targetFolder = parentFolder.getFoldersByName(targetFolderName).next(); } // 遍历所有表单项,找出文件上传的附件并移动 for (const itemResponse of allItemResponses) { const formItem = itemResponse.getItem(); // 判断当前项是否是文件上传类型 if (formItem.getType() === FormApp.ItemType.FILE_UPLOAD) { const uploadedFileIds = itemResponse.getResponse(); // 逐个移动上传的文件到目标文件夹 for (const fileId of uploadedFileIds) { const uploadedFile = DriveApp.getFileById(fileId); uploadedFile.moveTo(targetFolder); } } } }
关键调整说明
- 用
e.response.getItemResponses()正确获取了所有表单响应项,替代了你未定义的items变量 - 增加了文件夹重复判断:如果同名文件夹已存在,不会报错,直接复用
- 精准定位文件上传项:只有表单中「文件上传」类型的回答才会被处理,避免无效遍历
- 完整的附件移动逻辑:遍历每个上传的文件,调用
moveTo()完成移动
后续设置步骤
- 打开你的Google表单,点击右上角「扩展程序」→「Apps脚本」,替换原代码为上面的脚本
- 把
你的父文件夹唯一ID替换成实际的文件夹ID(从文件夹URL中提取,比如https://drive.google.com/drive/folders/XXXXXX里的XXXXXX) - 设置触发条件:
- 点击左侧时钟图标(「触发器」)→「添加触发器」
- 函数选择
onFormSubmit,事件源选「表单提交」,事件类型选「来自表单的提交」 - 保存并完成权限授权(需要允许脚本访问你的Drive和表单数据)
注意事项
- 确保你的表单里确实有「文件上传」类型的问题,否则脚本不会处理任何附件
- 如果你的文件夹命名字段不是第一个问题,调整
allItemResponses[0]里的索引即可(比如第二个问题就是[1])
内容的提问来源于stack exchange,提问作者Eide-Mare van Vuuren
相关产品推荐
相关产品推荐

