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

如何在Google Sheets中动态合并所有标签页数据并汇总销售佣金?

动态合并Deal标签页并统计销售总佣金

方案1:纯内置公式实现

适合Deal数量不多、标签名无特殊复杂字符的场景,无需脚本:

  1. 获取所有Deal标签名:在汇总页(假设名为「佣金汇总」)的空白单元格(比如A1)输入公式,自动获取除汇总页外的所有标签名:
=TEXTJOIN(";", TRUE, FILTER(BYROW(SEQUENCE(SHEETS()), LAMBDA(x, SHEETNAME(x))), BYROW(SEQUENCE(SHEETS()), LAMBDA(x, SHEETNAME(x)))<>"佣金汇总"))
  1. 动态合并数据并统计总佣金:在汇总页的表头下方(比如B2)输入公式,自动合并所有Deal页的A2:L数据,并按销售人员分组求和:
=QUERY(
  REDUCE({}, SPLIT(A1, ";"), LAMBDA(acc, sheetName, {acc; INDIRECT("'"&sheetName&"'!A2:L")})),
  "select Col1, sum(Col12) where Col1 is not null group by Col1 label sum(Col12)'总现金佣金'",
  0
)
  • 注意:Col12对应现金佣金所在的列(如果现金佣金在L列则为Col12,按实际列号调整);如果标签名包含空格或单引号,公式里的'"&sheetName&"'会自动包裹标签名,避免INDIRECT报错。

方案2:Google App Script实现(推荐)

当Deal标签页数量较多、或需要自动更新时,脚本方案更稳定可靠:

步骤1:编写脚本

打开Sheet,点击「扩展程序」→「Apps Script」,替换默认代码为:

function updateCommissionSummary() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const summarySheetName = "佣金汇总"; // 替换为你的汇总页名称
  const excludeSheets = [summarySheetName]; // 可添加其他需排除的非Deal标签页
  const targetColumns = 12; // A到L共12列,按实际列数调整
  const salesNameColIndex = 0; // 销售人员在A列(索引从0开始)
  const cashCommissionColIndex = 11; // 现金佣金在L列(索引从0开始)

  // 获取汇总页对象
  const summarySheet = ss.getSheetByName(summarySheetName);
  if (!summarySheet) throw new Error(`未找到汇总页:${summarySheetName}`);

  // 清空旧数据(保留表头)
  const lastRow = summarySheet.getLastRow();
  if (lastRow > 1) {
    summarySheet.getRange(2, 1, lastRow - 1, summarySheet.getLastColumn()).clearContent();
  }

  // 遍历所有Deal标签页,收集有效数据
  let allValidData = [];
  ss.getSheets().forEach(sheet => {
    const sheetName = sheet.getName();
    if (excludeSheets.includes(sheetName)) return;

    const sheetData = sheet.getRange(2, 1, sheet.getLastRow() - 1, targetColumns).getValues();
    // 过滤空行和无销售人员的行
    const filteredData = sheetData.filter(row => row[salesNameColIndex] !== "" && row[cashCommissionColIndex] !== "");
    allValidData = allValidData.concat(filteredData);
  });

  // 统计每个销售人员的总佣金
  const commissionStats = new Map();
  allValidData.forEach(row => {
    const name = row[salesNameColIndex];
    const commission = Number(row[cashCommissionColIndex]);
    commissionStats.set(name, (commissionStats.get(name) || 0) + commission);
  });

  // 将统计结果写入汇总页
  const resultRows = Array.from(commissionStats.entries());
  if (resultRows.length > 0) {
    summarySheet.getRange(2, 1, resultRows.length, 2).setValues(resultRows);
  }
}

// 设置自动更新触发器(可选,比如每小时更新一次)
function setupAutoUpdate() {
  // 先删除旧触发器(避免重复)
  ScriptApp.getProjectTriggers().forEach(trigger => {
    if (trigger.getHandlerFunction() === "updateCommissionSummary") {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  // 创建新触发器
  ScriptApp.newTrigger("updateCommissionSummary")
    .timeBased()
    .everyHour()
    .create();
}

步骤2:配置并运行

  1. 修改脚本中的summarySheetName、excludeSheets、列索引等参数,匹配你的Sheet结构;
  2. 点击脚本编辑器的「运行」按钮,授权脚本访问你的Sheet;
  3. 测试运行updateCommissionSummary,确认汇总页正确生成数据;
  4. 若需要自动更新,运行setupAutoUpdate设置定时触发器(可改为每天/每周,或绑定Sheet变更事件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:18:31