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

如何基于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()一次性写入整组数据,比逐行写入效率高,适合处理较大数据量。

使用步骤

  1. 打开目标Google Sheets工作簿
  2. 点击顶部菜单「扩展程序」→「Apps 脚本」
  3. 删除默认代码,粘贴上述脚本
  4. 点击运行按钮,首次运行需按提示完成授权操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:03:37