如何修改Google Apps Script实现同类标签合并到同一表格文件
修改Google Apps Script实现同名前缀工作表合并到同一表格文件
原代码是将每个非指定工作表单独存为表格文件,现在调整后可实现按前缀合并的需求:提取工作表名称的核心前缀(去除末尾的Check或Checked后缀),将同前缀的工作表合并到名为[前缀] Summary的表格文件中,处理前先清理目标文件夹内已存在的同名Summary文件。
以下是修改后的完整代码:
function copySheetsToFolder() { var ss = SpreadsheetApp.getActive(); var folderId = DriveApp.getFileById(ss.getId()).getParents().next().getId(); var sheets = ss.getSheets(); // 按前缀分组工作表 var sheetGroups = {}; sheets.forEach(function(sheet) { var sheetName = sheet.getName(); // 跳过指定的控制表和原始数据表 if (sheetName === 'ControlTab' || sheetName === 'RawData') return; // 提取核心前缀:忽略大小写去除末尾的Check/Checked var prefix = sheetName.replace(/\s+(Check|Checked)$/i, '').trim(); // 初始化分组容器 if (!sheetGroups[prefix]) { sheetGroups[prefix] = []; } sheetGroups[prefix].push(sheet); }); // 处理每个分组,生成对应Summary表格 Object.keys(sheetGroups).forEach(function(prefix) { var summaryName = prefix + ' Summary'; // 清理已存在的同名Summary文件 var existingFiles = DriveApp.getFilesByName(summaryName); while (existingFiles.hasNext()) { existingFiles.next().setTrashed(true); } // 创建新的Summary表格文件 var newSS = Drive.Files.insert( { title: summaryName, mimeType: MimeType.GOOGLE_SHEETS, parents: [{ id: folderId }] }, null, { supportsAllDrives: true } ); var targetSS = SpreadsheetApp.openById(newSS.id); // 将分组内的所有工作表复制到新表格 sheetGroups[prefix].forEach(function(sheet) { sheet.copyTo(targetSS).setName(sheet.getName()); }); // 删除新表格默认生成的空白Sheet1 targetSS.deleteSheet(targetSS.getSheets()[0]); }); }
关键逻辑说明
- 前缀提取:用正则表达式
/\s+(Check|Checked)$/i匹配末尾的Check或Checked(不区分大小写),替换后得到核心前缀,确保Toys Check和Toys Checked会被归为同一组。 - 工作表分组:通过对象
sheetGroups存储每个前缀对应的工作表数组,方便后续批量处理同组工作表。 - 旧文件清理:创建新表格前,先把目标文件夹内已存在的同名Summary文件移至回收站,避免重复文件干扰。
- 批量复制:针对每个前缀分组,创建对应Summary表格后,将组内所有工作表一次性复制进去,最后删除默认的空白工作表。
内容的提问来源于stack exchange,提问作者scriptnewb
相关产品推荐
相关产品推荐

