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

如何修改Google Apps Script实现单表数据同步至多文件夹下多表格

修改Google Apps Script实现多文件夹内表格数据同步

核心修改思路

  1. 新增递归文件夹遍历函数,扫描根文件夹及其所有子文件夹,收集所有Google Sheets文件;
  2. 优化源数据提取逻辑,增加存在性校验,避免无意义报错;
  3. 批量处理每个目标表格,支持替换旧数据或追加数据两种模式,同时加入错误捕获保障脚本稳定性。

完整修改后的代码

function syncDataToSheetsInFolders() {
  // 1. 提取源数据
  const sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = sourceSpreadsheet.getSheetByName('carpetas');
  if (!sourceSheet) {
    SpreadsheetApp.getUi().alert('源表格中未找到名为"carpetas"的工作表');
    return;
  }
  
  const lastRow = sourceSheet.getLastRow();
  const lastCol = sourceSheet.getLastColumn();
  if (lastRow === 0 || lastCol === 0) {
    SpreadsheetApp.getUi().alert('源工作表中无数据可同步');
    return;
  }
  const sourceData = sourceSheet.getRange(1, 1, lastRow, lastCol).getValues();

  // 2. 设置根文件夹ID(替换成你的根文件夹ID)
  const rootFolderId = "你的根文件夹ID";
  const rootFolder = DriveApp.getFolderById(rootFolderId);
  if (!rootFolder) {
    SpreadsheetApp.getUi().alert('无法找到指定的根文件夹');
    return;
  }

  // 3. 递归遍历所有文件夹,收集Google Sheets文件
  const allSheetsFiles = getAllSheetsInFolder(rootFolder);

  // 4. 遍历每个表格,同步数据
  allSheetsFiles.forEach(file => {
    try {
      const targetSpreadsheet = SpreadsheetApp.openById(file.getId());
      const targetSheet = targetSpreadsheet.getSheetByName('carpetas');
      
      if (!targetSheet) {
        console.log(`表格 ${file.getName()} 中未找到"carpetas"工作表,跳过`);
        return;
      }

      // 两种模式可选:替换旧数据 / 追加到末尾
      // 模式1:替换旧数据(清空后写入,适合数据过时需完全更新的场景)
      targetSheet.clearContents();
      targetSheet.getRange(1, 1, sourceData.length, sourceData[0].length).setValues(sourceData);

      // 模式2:追加到现有数据末尾(和原代码逻辑一致)
      // const startRow = targetSheet.getLastRow() + 1;
      // targetSheet.getRange(startRow, 1, sourceData.length, sourceData[0].length).setValues(sourceData);

      console.log(`已成功同步数据到表格:${file.getName()}`);
    } catch (e) {
      console.error(`处理表格 ${file.getName()} 时出错:${e.message}`);
    }
  });

  SpreadsheetApp.getUi().alert('数据同步完成,详情可查看日志');
}

// 递归函数:遍历文件夹及其子文件夹,返回所有Google Sheets文件
function getAllSheetsInFolder(folder) {
  let sheetsFiles = [];
  
  // 获取当前文件夹内的Google Sheets文件
  const files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (files.hasNext()) {
    sheetsFiles.push(files.next());
  }

  // 递归遍历子文件夹
  const subFolders = folder.getFolders();
  while (subFolders.hasNext()) {
    const subFolder = subFolders.next();
    sheetsFiles = sheetsFiles.concat(getAllSheetsInFolder(subFolder));
  }

  return sheetsFiles;
}

使用说明

  • 替换代码中的"你的根文件夹ID":从目标文件夹的URL中提取ID(例如https://drive.google.com/drive/folders/XXXXXX中的XXXXXX);
  • 选择同步模式:根据需求注释/取消注释对应模式的代码块;
  • 运行脚本:首次运行需授权,完成后可通过「视图>日志」查看同步详情;
  • 错误处理:脚本会跳过无目标工作表的表格,出错表格会在日志中记录,不会中断整个同步流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:45:31