首页 > 解决方案 > 用于查找特定列中最后一个单元格总和的脚本

问题描述

我正在尝试为表格制作此 Google 脚本,以便找到 F、N、R、S、T 中最后一个值的总和,并将该值输入到 U 列的最后一个单元格中。以下工作但我希望脚本从 5 列中的每一列中获取最后一个带有值的单元格。

        function myFunction() {
      var sheetname = "SHEET1"; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);
    var num1 = sheet.getRange("F2710").getValue();
    var num2 = sheet.getRange("N2710").getValue();
     var num3 = sheet.getRange("R2710").getValue();
     var num4 = sheet.getRange("S2710").getValue();
    var num5 = sheet.getRange("T2710").getValue();
    sheet.getRange("U2710").setValue(num1+num2+num3+num4+num5);
}

感谢您的时间和帮助!

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


底部总和

您必须提供工作表名称和 sumrow,然后提供 rum getSumNow()。

sumrow 是 reduce 函数中初始值对象的属性之一。

如果您希望在其他地方显示总和,可以使用以下方法:obj.getSum();

function getSumNow() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var cols=[6,14,18,19,20];
  var obj=cols.reduce(function(a,c,i){
    a.sum+=sh.getRange(getLastRowInCol(c,sh,ss),c).getValue();
    return a;
  },{sumcol:21,sumrow:21,sum:0,getSum:function(){sh.getRange(this.sumrow,this.sumcol).setValue(this.sum);}}).getSum();
}

上面的函数中使用了下面的函数,所以必须提供它。

function getLastRowInCol(col,sh,ss){
  var ss=ss||SpreadsheetApp.getActive();
  var sh=sh||ss.getActiveSheet();
  var col=col||sh.getActiveCell().getColumn();
  const rcA=sh.getRange(1,col,sh.getLastRow(),1).getValues().reverse()
  let s=0;
  for(let i=0;i<rcA.length;i++) {
    if(rcA[i][0].toString().length==0) {
      s++;
    }else{
      break;
    }
  }
  return rcA.length-s;
}

数组.reduce()

看来这是您更喜欢的:

function getSumNow() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet2');
  var cols=[6,14,18,19,20];
  var obj=cols.reduce(function(a,c,i){
    a.sum+=sh.getRange(getLastRowInCol(c,sh,ss),c).getValue();
    return a;
  },{sumcol:21,sumrow:getLastRowInCol(this.sumcol,sh,ss)+1,sum:0,getSum:function(){sh.getRange(this.sumrow,this.sumcol).setValue(this.sum);}}).getSum();
}

推荐阅读