You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:03:22