从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
相关产品推荐
相关产品推荐

