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

求助:按ID将Google表格批量复制到多个指定文件夹的脚本修复

修复后的批量复制Google表格脚本

原脚本存在几个核心问题导致功能失效:

  • 使用addFile()移动文件而非复制,导致原文件被转移而非生成副本
  • MIME类型判断错误,目标是Google表格却判断成了Google脚本
  • 重复获取源文件夹和文件,降低执行效率

以下是修复后的完整脚本:

function copySheetsToFolders() {
  // 获取当前表格及数据(跳过表头)
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getDataRange().getValues().splice(1);
  
  // 定义数据列索引
  var NAME_COL = 0;
  var FOLDER_ID_COL = 1;
  
  // 提前获取源文件夹及其中的Google表格(只执行一次,提升效率)
  var srcFolderId = "1d8rQZ2jDUoGl1Ek6DRtMpfgaoID8KREF";
  var srcFolder = DriveApp.getFolderById(srcFolderId);
  var targetFiles = srcFolder.getFilesByType(MimeType.GOOGLE_SHEETS);
  
  // 将源文件存入数组,避免多次遍历
  var filesToCopy = [];
  while (targetFiles.hasNext()) {
    filesToCopy.push(targetFiles.next());
  }
  
  // 遍历每个教职工的目标文件夹
  for (var i = 0; i < data.length; i++) {
    var staffName = data[i][NAME_COL];
    var dstFolderId = data[i][FOLDER_ID_COL];
    
    try {
      var dstFolder = DriveApp.getFolderById(dstFolderId);
      
      // 复制每个表格到目标文件夹
      filesToCopy.forEach(function(file) {
        // 复制时添加教职工名称作为前缀,方便区分归属
        var copyName = `${staffName}_${file.getName()}`;
        file.makeCopy(copyName, dstFolder);
      });
      
      Logger.log(`已完成${staffName}的文件夹复制`);
    } catch (e) {
      Logger.log(`处理${staffName}的文件夹时出错:${e.message}`);
    }
  }
}

关键修改说明:

  • 替换addFile()为makeCopy():addFile()是将文件从原位置移动到目标文件夹,makeCopy()才会生成文件副本,保留原文件
  • 修正MIME类型筛选:使用getFilesByType(MimeType.GOOGLE_SHEETS)直接筛选源文件夹中的Google表格,避免类型判断错误
  • 优化执行效率:提前获取所有需要复制的表格并存入数组,避免在130次循环中重复读取源文件夹
  • 增加错误处理:通过try-catch捕获无效文件夹ID等异常,避免脚本中途中断
  • 自定义副本名称:给复制后的文件添加教职工名称前缀,方便快速识别归属

使用注意事项:

  1. 确保你的Google账号对源文件夹和所有目标共享文件夹有编辑权限
  2. 首次运行时会弹出权限授权提示,需按照指引完成授权
  3. 可通过脚本编辑器的「查看」→「日志」查看执行进度和错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:01:20