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

如何通过文件夹ID将Google表格复制到指定文件夹的多个电子表格中

问题修正方案

你原代码的核心问题是获取目标文件夹后,直接对文件夹对象调用了hasNext()方法,但DriveApp.getFolderById()返回的是文件夹对象,不是文件迭代器,必须先调用getFiles()方法拿到文件夹里的文件列表才能遍历。另外还有一处小问题,获取工作表名称时没必要再调用getActiveSpreadsheet(),直接用源工作表的getName()更可靠。

修正后的完整代码:

function copySheetVA() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = source.getActiveSheet();
  var sourceFile = DriveApp.getFileById(source.getId());
  // 获取目标文件夹
  var targetFolder = DriveApp.getFolderById('1zZDvtFzIvmD-7Z5f5Sbi4G3-XXXXX');
  // 获取目标文件夹内的所有文件迭代器
  var folderFiles = targetFolder.getFiles();
  var thisFile; 

  while (folderFiles.hasNext()) {
    thisFile = folderFiles.next();
    // 只处理Google表格文件,避免非表格文件报错
    if (thisFile.getName() !== sourceFile.getName() && thisFile.getMimeType() === MimeType.GOOGLE_SHEETS) {
      var currentSS = SpreadsheetApp.openById(thisFile.getId());
      // 直接用源工作表的名称,避免activeSheet切换问题
      var actualSheetName = sheet.getName();
      // 复制工作表到目标表格
      var copiedSheet = sheet.copyTo(currentSS);
      // 直接对复制后的工作表重命名,不用通过索引找
      copiedSheet.setName(actualSheetName);
    }    
  }
}

关键修改点说明:

  • 拆分目标文件夹和文件迭代器的获取:先存目标文件夹对象,再调用getFiles()拿到可遍历的文件列表,这样才能正常使用hasNext()循环
  • 增加MIME类型判断:确保只处理Google表格文件,避免遍历到文件夹里的文档、图片等非表格文件时触发报错
  • 简化工作表名称获取:直接用源工作表的sheet.getName(),不用重复调用getActiveSpreadsheet(),防止代码执行过程中活动表格切换导致名称错误
  • 优化重命名逻辑:复制工作表后直接用返回的copiedSheet对象操作,比通过索引定位最后一个工作表更稳妥,避免目标表格原有工作表顺序变化导致出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:55:15