如何基于Name列将Google Sheets单表数据拆分至多工作表?
Google Sheets 按名称拆分数据到指定工作表(Apps Script实现)
实现代码与说明
直接用以下脚本就能完成需求,逻辑简洁高效:
function splitDataByName() { // 获取当前工作簿 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 定位数据源表和三个目标表 const rawSheet = ss.getSheetByName('table_raw'); const targetSheets = { 'Jim': ss.getSheetByName('Jim'), 'Dan': ss.getSheetByName('Dan'), 'Chloe': ss.getSheetByName('Chloe') }; // 清空所有目标表的数据(从第2行开始清,保留表头;不需要表头直接用sheet.getDataRange().clearContent()) Object.values(targetSheets).forEach(sheet => { sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).clearContent(); }); // 读取数据源的所有数据(包含表头) const allData = rawSheet.getDataRange().getValues(); const header = allData[0]; // 按Name列分组数据(Name列对应数组第0位) const groupedData = {}; allData.slice(1).forEach(row => { const name = row[0]; if (!groupedData[name]) { groupedData[name] = [header]; // 给每个分组添加表头 } groupedData[name].push(row); }); // 将分组数据写入对应工作表 Object.entries(groupedData).forEach(([name, data]) => { const sheet = targetSheets[name]; if (sheet) { sheet.getRange(1, 1, data.length, data[0].length).setValues(data); } }); }
关键细节
- 清空数据:用
clearContent()仅清除单元格内容,保留格式;需要连格式一起清除的话,换成clear()即可。 - 数据分组:跳过表头后遍历数据,按Name列归类,自动为每个分组添加表头,确保目标表结构和源表一致。
- 高效写入:通过
setValues()一次性写入整组数据,比逐行写入效率高,适合处理较大数据量。
使用步骤
- 打开目标Google Sheets工作簿
- 点击顶部菜单「扩展程序」→「Apps 脚本」
- 删除默认代码,粘贴上述脚本
- 点击运行按钮,首次运行需按提示完成授权操作
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

