Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于查找特定列中最后一个单元格的总和的脚本_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 用于查找特定列中最后一个单元格的总和的脚本

Javascript 用于查找特定列中最后一个单元格的总和的脚本,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在尝试为工作表创建这个Google脚本,以便找到F、N、R、S、T中最后一个值的总和,并将该值输入到U列的最后一个单元格中。下面的方法可行,但我希望脚本从5列中的每一列中获取最后一个单元格中的值 function myFunction() { var sheetname = "SHEET1"; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);

我正在尝试为工作表创建这个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);
}
谢谢你的时间和帮助

底部总和

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

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

如果您希望在其他地方显示总和,可以使用以下方法:obj.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;
}

我一定是做错了什么。我知道有两个功能。我试着先运行getSumNow,然后运行getLastRowInCol功能,但什么都没发生。我还尝试将两者包装在一个函数中,但什么也没有发生。更奇怪的是,当我将您的代码包含在另一个函数中时,它确实可以工作,但会重写列的最后一行,而不是将其插入列的最后一个空行(这是期望的结果)。知道我做错了什么吗?我已经编辑了上面添加的代码。您说希望脚本找到五列中的最后一个单元格,所以我假设您将为函数提供最后一个单元格的行,因为您似乎不希望函数为您找到它。我现在看起来它有点工作了。但是它会根据
sumcol:21,sumrow:21将总和粘贴到第21列和第21行中
Yes它会在第一个版本中这样做。我以为你会为第21列提供行号,但我刚刚添加的第二个版本将总和放在第一个空单元格中,正好在列中最后一个单元格的下方。Cooper!这正是我需要的!非常感谢。很抱歉,我第一次沟通时遇到了麻烦。我感谢你的时间和技巧!非常感谢。
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;
}
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();
}