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

Google Script技术问询:如何实现数据表第12列的运行总计计算

Google Sheets脚本实现运行总计写入解决方案

核心需求回顾

需要在目标账户数据表的新空白行第12列写入运行总计,计算规则:(TRANSACTIONS表E17收款 - E15付款) + 目标表最后一行第12列历史累计值

两种实现方案

方案1:写入静态计算值(值固定,不随后续数据修改变动)

直接计算出运行总计的数值后写入单元格,适合不需要动态更新的场景:

修改后的完整脚本:

function submitData(){
  var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
  var shUserForm = myGoogleSheet.getSheetByName("TRANSACTIONS");
  var shAccount = shUserForm.getRange("E5").getValue();
  var datasheet = myGoogleSheet.getSheetByName(shAccount);
  var blankRow = datasheet.getLastRow() + 1;

  // 写入基础数据
  datasheet.getRange(blankRow,2).setValue(shUserForm.getRange("E5").getValue()); 
  datasheet.getRange(blankRow,3).setValue(shUserForm.getRange("E7").getValue());
  datasheet.getRange(blankRow,4).setValue(shUserForm.getRange("E9").getValue());
  datasheet.getRange(blankRow,5).setValue(shUserForm.getRange("E11").getValue());
  datasheet.getRange(blankRow,6).setValue(shUserForm.getRange("E13").getValue());
  datasheet.getRange(blankRow,7).setValue(shUserForm.getRange("E19").getValue());

  // 计算并写入运行总计
  var received = shUserForm.getRange("E17").getValue();
  var paid = shUserForm.getRange("E15").getValue();
  var difference = received - paid;
  // 处理目标表为空的情况(首次写入)
  var historicalTotal = datasheet.getLastRow() === 0 ? 0 : datasheet.getRange(datasheet.getLastRow(), 12).getValue();
  var runningTotal = difference + historicalTotal;
  datasheet.getRange(blankRow, 12).setValue(runningTotal);
}

方案2:设置动态公式(值随上一行累计值变动而更新)

如果希望后续目标表历史累计值修改时,当前行的运行总计自动更新,可以设置单元格公式:

修改后的完整脚本:

function submitData(){
  var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
  var shUserForm = myGoogleSheet.getSheetByName("TRANSACTIONS");
  var shAccount = shUserForm.getRange("E5").getValue();
  var datasheet = myGoogleSheet.getSheetByName(shAccount);
  var blankRow = datasheet.getLastRow() + 1;

  // 写入基础数据
  datasheet.getRange(blankRow,2).setValue(shUserForm.getRange("E5").getValue()); 
  datasheet.getRange(blankRow,3).setValue(shUserForm.getRange("E7").getValue());
  datasheet.getRange(blankRow,4).setValue(shUserForm.getRange("E9").getValue());
  datasheet.getRange(blankRow,5).setValue(shUserForm.getRange("E11").getValue());
  datasheet.getRange(blankRow,6).setValue(shUserForm.getRange("E13").getValue());
  datasheet.getRange(blankRow,7).setValue(shUserForm.getRange("E19").getValue());

  // 设置运行总计公式
  var received = shUserForm.getRange("E17").getValue();
  var paid = shUserForm.getRange("E15").getValue();
  var difference = received - paid;
  var formula;
  // 处理目标表为空的情况(首次写入)
  if (blankRow === 1) {
    formula = `=${difference}`;
  } else {
    // L是第12列的列标,引用上一行的累计值
    formula = `=${difference}+L${blankRow - 1}`;
  }
  datasheet.getRange(blankRow, 12).setFormula(formula);
}

关键说明

  • 两种方案都处理了目标账户数据表为空的边界情况(首次写入时历史累计值为0)
  • 方案1的数值是静态的,提交后不受原表单或历史行修改影响;方案2的公式是动态的,会随上一行累计值变化自动更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:48:20