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

从Drive文件夹复制指定Sheet并合并数据至活动工作表

解决方法

修改后的代码

function mergeMasterSheetsWithFormat() {
  const folderId = "你的文件夹ID"; // 替换成实际的文件夹ID
  const targetSheet = SpreadsheetApp.getActive().getSheetByName("Sheet1"); // 目标工作表名称,注意加引号
  const folder = DriveApp.getFolderById(folderId);
  const spreadsheets = folder.getFilesByType("application/vnd.google-apps.spreadsheet");

  while (spreadsheets.hasNext()) {
    const file = spreadsheets.next();
    const sourceSpreadsheet = SpreadsheetApp.openById(file.getId());
    const sourceSheet = sourceSpreadsheet.getSheetByName("MasterSheet");

    // 检查当前文件是否存在MasterSheet
    if (!sourceSheet) continue;

    // 获取源表有数据的范围(包含格式)
    const sourceRange = sourceSheet.getDataRange();
    // 获取目标表最后一行,确定粘贴起始位置
    const targetLastRow = targetSheet.getLastRow();
    const targetStartRow = targetLastRow === 0 ? 1 : targetLastRow + 1; // 空表从第一行开始,否则从下一行
    const targetRange = targetSheet.getRange(targetStartRow, 1, sourceRange.getNumRows(), sourceRange.getNumColumns());

    // 复制值和格式(包括条件格式生成的单元格颜色)
    sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
    sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  }
}

关键改动说明

  • 精准定位目标工作表:通过getSheetByName("MasterSheet")筛选出每个文件中指定的工作表,不存在则直接跳过当前文件
  • 实现数据合并而非工作表复制:不再复制整个工作表到目标文件,而是获取源表的有效数据范围,粘贴到目标表的下一行,完成数据合并
  • 完整保留格式:通过两次copyTo操作,分别粘贴格式(包含条件格式生成的单元格颜色)和单元格值,确保格式不丢失
  • 修复语法错误:原代码中Sheet1未加引号,修改为字符串形式"Sheet1",避免未定义变量报错
  • 兼容空表场景:判断目标表是否为空,自动调整粘贴起始行,避免第一行出现空白

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:01:22