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

如何将Google Form双上传区文件分别存入按提交者命名的Google Drive文件夹

Google Form双文件上传区分类存储脚本修改方案

修改说明

原有脚本存在两个问题:

  • 仅适配单个文件上传区的存储逻辑,未覆盖第二个上传区
  • 同名提交者的文件夹编号规则未实现,仅判断文件夹是否存在未生成带后缀的命名

前置准备

先确认你的Google Form字段顺序(从第一个问题开始计数,下标从0开始):

  • 姓名字段的下标
  • 第一个文件上传区的下标
  • 第二个文件上传区的下标
    再提前创建两个顶级文件夹,分别对应两个上传区的根存储目录,获取它们的文件夹ID。

修改后完整脚本

// 配置常量,请替换为你自己的参数
const NAME_ITEM_INDEX = 0; // 姓名字段的下标
const UPLOAD1_ITEM_INDEX = 2; // 第一个文件上传区的下标
const UPLOAD1_TOP_FOLDER_ID = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u"; // 第一个上传区对应的顶级文件夹ID
const UPLOAD2_ITEM_INDEX = 3; // 第二个文件上传区的下标,按你实际表单调整
const UPLOAD2_TOP_FOLDER_ID = "替换为第二个上传区对应的顶级文件夹ID";

function onFormSubmit(e) {
  const form = FormApp.getActiveForm();
  const formResponses = form.getResponses();
  const itemResponses = formResponses[formResponses.length - 1].getItemResponses();

  // 获取提交者姓名
  const submitterName = itemResponses[NAME_ITEM_INDEX].getResponse().toString().trim();

  // 处理第一个上传区的文件存储
  const upload1Folder = getTargetFolder(UPLOAD1_TOP_FOLDER_ID, submitterName);
  itemResponses[UPLOAD1_ITEM_INDEX].getResponse().forEach(fileId => {
    DriveApp.getFileById(fileId).moveTo(upload1Folder);
  });

  // 处理第二个上传区的文件存储
  const upload2Folder = getTargetFolder(UPLOAD2_TOP_FOLDER_ID, submitterName);
  itemResponses[UPLOAD2_ITEM_INDEX].getResponse().forEach(fileId => {
    DriveApp.getFileById(fileId).moveTo(upload2Folder);
  });
}

// 辅助函数:生成符合命名规则的目标文件夹
function getTargetFolder(topFolderId, baseName) {
  const topFolder = DriveApp.getFolderById(topFolderId);
  // 查找所有前缀匹配的文件夹
  const existingFolders = topFolder.getFolders();
  let maxSuffix = 0;
  while (existingFolders.hasNext()) {
    const folder = existingFolders.next();
    const folderName = folder.getName();
    if (folderName === baseName) {
      maxSuffix = Math.max(maxSuffix, 1);
    } else if (folderName.startsWith(`${baseName}_`)) {
      const suffix = parseInt(folderName.split("_")[1], 10);
      if (!isNaN(suffix)) {
        maxSuffix = Math.max(maxSuffix, suffix + 1);
      }
    }
  }
  // 生成最终文件夹名
  const finalFolderName = maxSuffix === 0 ? baseName : `${baseName}_${maxSuffix}`;
  return topFolder.createFolder(finalFolderName);
}

部署说明

  1. 替换脚本开头的4个配置常量为你自己的实际参数
  2. 保存脚本后,在Apps Script编辑器的「触发器」页面,添加新触发器:
    • 选择要运行的函数:onFormSubmit
    • 选择事件来源:表单
    • 选择事件类型:表单提交时
  3. 首次运行会请求权限,按照提示授权即可。

内容的提问来源于stack exchange,提问作者Learning Ahh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:04