Google Apps Script按汽车厂商拆分Sheet数据至独立工作表
Google Sheets 按厂商维度自动拆分数据集脚本
核心问题适配
针对两个实现难点做了定向处理:
- 无辅助列提取纯厂商名:运行时通过正则直接匹配Manufacturer字段值,捕获末尾数字前的纯厂商名称,不需要在表格里新增任何计算列
- 工作表自动命名:提取到的纯厂商名直接作为对应工作表的名称,不存在对应工作表时自动新建,已有同名工作表时直接复用并清空旧数据,避免重复写入
完整代码
function splitDatasetByManufacturer() { const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 替换为你存放原始数据集的工作表名称 const sourceSheet = activeSpreadsheet.getSheetByName('原始数据'); const allData = sourceSheet.getDataRange().getValues(); // 提取表头,剩余为业务数据行 const tableHeader = allData.shift(); // 正则规则:匹配开头的任意字母序列,忽略末尾任意长度的数字后缀 const manuNameRegex = /^([A-Za-z]+)\d*$/; const groupedDataset = {}; // 按厂商分组数据 allData.forEach(row => { const rawManufacturer = row[0].toString().trim(); const regexMatch = rawManufacturer.match(manuNameRegex); if (!regexMatch) return; const pureManufacturer = regexMatch[1]; if (!groupedDataset[pureManufacturer]) groupedDataset[pureManufacturer] = []; groupedDataset[pureManufacturer].push(row); }); // 逐组写入对应工作表 Object.keys(groupedDataset).forEach(manuName => { let targetSheet = activeSpreadsheet.getSheetByName(manuName); if (!targetSheet) targetSheet = activeSpreadsheet.insertSheet(manuName); // 清空工作表原有内容,避免历史数据干扰 targetSheet.clearContents(); // 写入表头 targetSheet.getRange(1, 1, 1, tableHeader.length).setValues([tableHeader]); // 写入对应厂商的所有数据行 const rowCount = groupedDataset[manuName].length; if (rowCount > 0) { targetSheet.getRange(2, 1, rowCount, tableHeader.length).setValues(groupedDataset[manuName]); } }); }
使用说明
- 打开你的Google表格,点击「扩展程序」-「Apps Script」进入脚本编辑器,把上述代码粘贴进去保存
- 把代码中
getSheetByName('原始数据')里的原始数据替换成你自己存放源数据的工作表实际名称 - 首次运行会弹出Google授权提示,授予脚本表格编辑权限即可正常执行
- 针对给出的Ford250、Toyota89、Tesla45678这类样例值,脚本会自动拆分出Ford、Toyota、Tesla三个独立工作表,每个表保留原表头和对应厂商的全部数据行,和预期效果一致
- 如果后续厂商名存在非字母的前缀(比如带中文、连字符、空格),可以把正则替换为
/^(.+?)\d+$/,即可适配任意前缀+末尾数字的字段格式
内容的提问来源于stack exchange,提问作者Jackson Smith
相关产品推荐
相关产品推荐

