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

如何修改Google Apps Script以支持Google表单单问题多文件提交处理?

Google Apps Script 适配表单多文件提交的修改方案

需求回顾

Google表单包含4个问题:

  1. 公司名称
  2. 提交公司Logo(支持多文件)
  3. 提交公司照片(支持多文件)
  4. 提交公司视频(支持多文件)

表单收到响应时,需完成以下操作:

  • 将问题2-4的所有文件重命名为「公司名_文件类型」,同一问题有多份文件时追加序号(如CompanyName_Logo_1、CompanyName_Logo_2)
  • 在指定Drive父文件夹下创建以公司名命名的子文件夹,将所有文件移入该文件夹

原代码仅支持单问题单文件提交,以下是适配多文件场景的修改方案:

修改后的完整代码

function onFormSubmit(e) {
  const responses = e.values;
  const companyName = responses[1].trim(); 
  // 拆分每个问题的多文件URL,处理空响应的情况
  const logoUrls = responses[2] ? responses[2].split(',').map(url => url.trim()) : [];
  const photoUrls = responses[3] ? responses[3].split(',').map(url => url.trim()) : [];
  const videoUrls = responses[4] ? responses[4].split(',').map(url => url.trim()) : [];
  
  const parentFolderId = 'paste-parent-folder-id-here'; 
  const parentFolder = DriveApp.getFolderById(parentFolderId);
  let companyFolder;
  
  // 处理文件夹已存在的情况(避免重复提交时创建重复文件夹)
  try {
    companyFolder = parentFolder.getFoldersByName(companyName).next();
  } catch (e) {
    companyFolder = parentFolder.createFolder(companyName);
  }
  
  /**
   * 批量移动并重命名文件
   * @param {Array} urls - 文件URL数组
   * @param {String} fileType - 文件类型标识(Logo/Photo/Video)
   */
  function batchMoveAndRenameFiles(urls, fileType) {
    urls.forEach((url, index) => {
      try {
        const fileId = extractFileId(url);
        if (fileId) {
          Logger.log(`处理文件ID: ${fileId}`);
          const file = DriveApp.getFileById(fileId);
          // 生成文件名:单文件不加序号,多文件追加序号
          const newName = urls.length === 1 
            ? `${companyName}_${fileType}` 
            : `${companyName}_${fileType}_${index + 1}`;
          file.setName(newName);
          file.moveTo(companyFolder);
        }
      } catch (error) {
        Logger.log(`处理URL ${url} 出错: ${error.message}`);
      }
    });
  }

  // 分别处理三类文件
  batchMoveAndRenameFiles(logoUrls, 'Logo');
  batchMoveAndRenameFiles(photoUrls, 'Photo');
  batchMoveAndRenameFiles(videoUrls, 'Video');
}

/**
 * 从Google表单文件URL中提取文件ID
 * @param {String} url - 表单返回的文件URL
 * @returns {String|null} 文件ID或null
 */
function extractFileId(url) {
  if (!url) return null;
  // 适配两种常见的文件URL格式:?id=xxx 或 /d/xxx/
  const idMatch = url.match(/[-\w]{25,}/);
  return idMatch ? idMatch[0] : null;
}

关键修改说明

  • 多文件URL拆分:表单多文件提交时,响应字段会以逗号分隔多个URL,通过split(',')拆分并去除空格,得到单个URL的数组
  • 批量处理逻辑:新增batchMoveAndRenameFiles函数,遍历每个问题的文件URL数组,根据文件数量决定是否追加序号
  • 文件夹重复处理:添加了文件夹存在性检查,避免同一公司重复提交时创建多个同名文件夹
  • 文件ID提取优化:修改extractFileId函数,通过正则匹配适配Google Drive文件的两种常见URL格式,比原有的拆分方式更可靠
  • 错误处理增强:针对每个文件单独捕获错误,避免单个文件处理失败导致整个流程中断

内容的提问来源于stack exchange,提问作者JiEun Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:26:02