如何在Google Apps Script中关联表单的文件响应文件夹
解决Google表单上传文件夹关联的问题(表格自定义菜单触发脚本)
核心结论
不用改用onFormSubmit事件,直接在表格触发的脚本里就能完成上传文件夹的关联,同时解决表单停止接受响应的问题。
实现步骤及代码示例
1. 复制基础表单并生成响应表格
先复制你的基础表单,在指定文件夹下创建响应表格,并将表单的响应目标指向这个表格。
2. 创建上传文件夹并关联到表单
利用Drive API设置表单的上传文件夹(FormApp未直接提供该方法),关联后重新启用表单接受响应。
完整代码示例:
function createFormStructure() { // 配置参数 const baseFormId = "你的基础表单ID"; const rootFolderId = "根文件夹ID"; // 存放新表单文件夹的父文件夹 const newFormName = "新表单名称"; // 1. 创建新的表单文件夹 const rootFolder = DriveApp.getFolderById(rootFolderId); const formFolder = rootFolder.createFolder(`${newFormName}_表单文件夹`); // 2. 复制基础表单到新文件夹 const baseForm = FormApp.openById(baseFormId); const copiedFormFile = DriveApp.getFileById(baseForm.getId()).makeCopy(newFormName, formFolder); const copiedForm = FormApp.openById(copiedFormFile.getId()); // 3. 创建响应表格并关联到表单 const responseSheetFile = SpreadsheetApp.create(`${newFormName}_响应表格`); DriveApp.getFileById(responseSheetFile.getId()).moveTo(formFolder); copiedForm.setDestination(FormApp.DestinationType.SPREADSHEET, responseSheetFile.getId()); // 4. 创建上传文件夹 const uploadFolder = formFolder.createFolder(`${newFormName}_上传文件`); // 5. 利用Drive API关联上传文件夹到表单 // 注意:需先在脚本编辑器中启用Drive API(资源->高级Google服务->开启Drive API) Drive.Files.update( { properties: { key: "driveFolderId", value: uploadFolder.getId() } }, copiedFormFile.getId() ); // 6. 恢复表单接受响应(无上传文件夹时表单会自动停止) copiedForm.setAcceptingResponses(true); SpreadsheetApp.getUi().alert("表单结构创建完成!"); } // 给表格添加自定义菜单 function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu("表单工具") .addItem("创建新表单结构", "createFormStructure") .addToUi(); }
关键说明
- 启用Drive API:在脚本编辑器中点击「资源」->「高级Google服务」,找到「Drive API」开启;同时要确保对应的Google Cloud项目中也启用了Drive API(脚本编辑器右上角「项目设置」->「查看Google Cloud项目」->搜索Drive API启用)。
- 无需依赖
onFormSubmit:你的场景是从表格触发初始化表单结构,所有操作都能在初始化阶段完成,用提交事件反而会增加复杂度,还解决不了初始化时的文件夹关联问题。 - 恢复表单响应:关联上传文件夹后必须调用
setAcceptingResponses(true),因为表单存在文件上传字段但未关联文件夹时,会自动停止接受响应,手动点击「恢复」按钮本质就是执行这个操作。
内容的提问来源于stack exchange,提问作者MarcZX10
相关产品推荐
相关产品推荐

