如何在Google Apps Script中基于两列数据计算分类金额总和?
按重量类别累加金额的实现方案
一、用Google Sheets内置函数快速实现
不需要写代码,用SUMIF函数就能直接按重量类别对金额求和,完全替代只能计数的COUNTIF。
假设你的表格结构是:
- A列:weightclass(重量类别)
- B列:amount(金额)
- C列:需要统计的目标类别(比如C2是"轻量"、C3是"中量")
- D列:对应类别的金额总计
在D2单元格输入公式:
=SUMIF(A:A, C2, B:B)
然后下拉填充到D列其他单元格,就能自动计算每个类别的金额总和。
参数说明:
A:A:条件判断的范围(重量类别列)C2:要匹配的目标类别(可以直接写固定值比如"轻量",也可以引用单元格)B:B:要求和的数值范围(金额列)
如果需要多条件求和(比如同时匹配重量类别和其他筛选条件),可以用SUMIFS函数,条件与对应范围成对设置即可。
二、用Apps Script自定义实现(新手友好版)
如果需要更灵活的自动化处理(比如一键更新所有总计、自定义逻辑),可以用以下简单脚本:
- 打开Google Sheets,点击顶部菜单栏「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下自定义函数脚本:
// 自定义函数:按重量类别求和 function sumByWeightClass(weightRange, amountRange, targetClass) { let total = 0; const weights = weightRange.flat(); const amounts = amountRange.flat(); // 遍历匹配并累加金额 for (let i = 0; i < weights.length; i++) { if (weights[i] === targetClass) { total += amounts[i] || 0; } } return total; }
- 保存脚本(随便起个项目名,比如"WeightSum"),关闭脚本编辑器
回到表格,在需要显示总计的单元格输入:
=sumByWeightClass(A:A, B:B, "轻量")
或者引用单元格作为目标类别:
=sumByWeightClass(A:A, B:B, C2)
按下回车就能得到对应类别的金额总和。
如果想要一键批量计算所有类别的总计,可以再添加一个触发脚本:
// 一键计算所有类别的总计并写入指定区域 function calculateAllTotals() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 假设A列是重量类别,B列是金额,E列放唯一类别,F列放总计 const data = sheet.getDataRange().getValues(); const classMap = new Map(); // 遍历数据累加金额 for (let i = 1; i < data.length; i++) { // 跳过表头行 const weightClass = data[i][0]; const amount = data[i][1] || 0; if (weightClass) { classMap.set(weightClass, (classMap.get(weightClass) || 0) + amount); } } // 将结果写入E、F列(从E2开始) let row = 2; for (const [cls, total] of classMap) { sheet.getRange(row, 5).setValue(cls); sheet.getRange(row, 6).setValue(total); row++; } }
保存后,在Apps Script编辑器的「触发器」菜单添加一个「从电子表格」触发的「点击时」事件,回到表格就能通过「扩展程序」→「WeightSum」→「calculateAllTotals」一键生成所有类别的总计。
内容的提问来源于stack exchange,提问作者Liukkonen
相关产品推荐
相关产品推荐

