如何用Apps Script实现输入Val列时自动计算Total列累加值
用Google Apps Script实现Total列自动累加
实现思路
通过Google Sheets的onEdit简单触发器,监听Val列(B列)的编辑操作,实时重新计算Total列(C列)的累加值,无需手动输入公式。
操作步骤
- 打开目标Google表格,点击菜单栏「扩展程序」→「Apps Script」
- 删除编辑器中的默认代码,替换为下方脚本
- 点击保存按钮,给项目命名(比如
AutoTotalCalculator) - 返回表格测试:在B列(Val)输入或修改数值,C列(Total)会自动更新累加结果
基础版脚本(适合小数据量)
function onEdit(e) { const sheet = e.source.getActiveSheet(); const editedCell = e.range; // 仅处理Val列(第2列)的数据行(行号≥2,表头在第1行) if (editedCell.getColumn() === 2 && editedCell.getRow() >= 2) { const lastRow = sheet.getLastRow(); let runningTotal = 0; // 遍历所有数据行,重新计算Total for (let row = 2; row <= lastRow; row++) { const val = sheet.getRange(row, 2).getValue(); if (val === "") { sheet.getRange(row, 3).clearContent(); } else { runningTotal += val; sheet.getRange(row, 3).setValue(runningTotal); } } } }
优化版脚本(适合大数据量,性能更优)
如果表格数据量较大,推荐用批量读写方式减少API交互次数,提升运行效率:
function onEdit(e) { const sheet = e.source.getActiveSheet(); const editedCell = e.range; if (editedCell.getColumn() === 2 && editedCell.getRow() >= 2) { const lastRow = sheet.getLastRow(); // 批量读取B列所有数据 const valRange = sheet.getRange(2, 2, lastRow - 1, 1); const values = valRange.getValues(); const totalValues = []; let runningTotal = 0; // 计算所有Total值 for (const rowVal of values) { const val = rowVal[0]; if (val === "") { totalValues.push([""]); } else { runningTotal += val; totalValues.push([runningTotal]); } } // 批量写入C列 const totalRange = sheet.getRange(2, 3, totalValues.length, 1); totalRange.setValues(totalValues); } }
补充说明
- 脚本默认表头在第1行,仅处理第2行及以下的数据行
- 若某行Val列被清空,对应的Total列也会同步清空,后续行的累加将跳过空值继续计算
onEdit是简单触发器,无需额外授权,编辑表格时会自动触发执行
内容的提问来源于stack exchange,提问作者Heath Atchley
相关产品推荐
相关产品推荐

