Javascript 用于查找特定列中最后一个单元格的总和的脚本
我正在尝试为工作表创建这个Google脚本,以便找到F、N、R、S、T中最后一个值的总和,并将该值输入到U列的最后一个单元格中。下面的方法可行,但我希望脚本从5列中的每一列中获取最后一个单元格中的值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);
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();
}