求助:按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等异常,避免脚本中途中断 - 自定义副本名称:给复制后的文件添加教职工名称前缀,方便快速识别归属
使用注意事项:
- 确保你的Google账号对源文件夹和所有目标共享文件夹有编辑权限
- 首次运行时会弹出权限授权提示,需按照指引完成授权
- 可通过脚本编辑器的「查看」→「日志」查看执行进度和错误信息
内容的提问来源于stack exchange,提问作者weterpalters
相关产品推荐
相关产品推荐

