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

基于Google Apps Script调用外部工作表实现SUMIFS多条件统计

Google Apps Script 多条件求和跨表写入实现方案

实现逻辑说明

  • 示例选取「营销渠道」「活动状态」2个字段作为求和匹配条件,你可以根据实际需求修改条件字段和匹配值
  • 自动读取源表「Raw Data」中符合条件的行,对最后5个指标字段分别求和
  • 自动匹配目标表「Destination」的字段顺序,将求和结果写入对应字段下方的新行

完整代码

function multiConditionSumAndWrite() {
  // 请替换为你自己的表格ID,ID可从表格链接的/d/和/edit之间的字符串提取
  const SOURCE_SPREADSHEET_ID = "你的源表ID";
  const TARGET_SPREADSHEET_ID = "你的目标表ID";
  const SOURCE_SHEET_NAME = "Raw Data";
  const TARGET_SHEET_NAME = "Destination";

  // 示例2个求和条件,可根据实际需求修改字段名和匹配值
  const CONDITIONS = [
    { fieldName: "营销渠道", matchValue: "抖音" },
    { fieldName: "活动状态", matchValue: "已上线" }
  ];

  // 1. 读取源表全量数据
  const sourceSs = SpreadsheetApp.openById(SOURCE_SPREADSHEET_ID);
  const sourceSheet = sourceSs.getSheetByName(SOURCE_SHEET_NAME);
  const sourceData = sourceSheet.getDataRange().getValues();
  const sourceHeader = sourceData[0];

  // 2. 定位条件字段、最后5个指标字段的列索引
  const conditionColIndexes = CONDITIONS.map(cond => sourceHeader.indexOf(cond.fieldName));
  const metricColIndexes = [];
  const metricCount = 5;
  for (let i = sourceHeader.length - metricCount; i < sourceHeader.length; i++) {
    metricColIndexes.push(i);
  }

  // 3. 执行多条件求和计算
  const sumResult = new Array(metricCount).fill(0);
  // 跳过表头从第二行开始遍历
  for (let rowIndex = 1; rowIndex < sourceData.length; rowIndex++) {
    const row = sourceData[rowIndex];
    // 校验当前行是否匹配所有预设条件
    const isMatch = CONDITIONS.every((cond, idx) => {
      const colIdx = conditionColIndexes[idx];
      return row[colIdx] === cond.matchValue;
    });
    if (isMatch) {
      // 累加对应指标值,非数值格式默认按0计算
      metricColIndexes.forEach((colIdx, metricIdx) => {
        sumResult[metricIdx] += Number(row[colIdx]) || 0;
      });
    }
  }

  // 4. 按目标表字段顺序写入结果
  const targetSs = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID);
  const targetSheet = targetSs.getSheetByName(TARGET_SHEET_NAME);
  const targetHeader = targetSheet.getDataRange().getValues()[0];
  // 初始化新行数据
  const targetRow = new Array(targetHeader.length).fill("");
  metricColIndexes.forEach((colIdx, metricIdx) => {
    const metricName = sourceHeader[colIdx];
    const targetColIdx = targetHeader.indexOf(metricName);
    if (targetColIdx > -1) {
      targetRow[targetColIdx] = sumResult[metricIdx];
    }
  });
  // 追加新行到目标表已有数据的下方
  targetSheet.appendRow(targetRow);
}

使用步骤

  • 打开任意Google Sheet,点击顶部菜单「扩展程序」-「Apps Script」进入脚本编辑器
  • 替换代码中的源表ID、目标表ID为实际值,根据你的业务需求修改CONDITIONS数组里的条件配置
  • 点击保存按钮,首次运行需要按提示授权脚本访问表格的权限
  • 运行完成后即可在目标表「Destination」中看到新增的求和结果行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:30:00