如何使用 Google Apps 脚本对长度不同的列求和?
How can I use Google Apps Script to sum a column that will vary in length?
我正在尝试使用 Google Apps scipt 在该列的最底部添加列的求和公式。行数会有所不同,但起始单元格将保持不变。
我想使用公式而不是插入静态总和,以便用户无需 运行 任何脚本即可查看最新总和。
constantslr+savingslr+needslr+wantslr
= the number of rows to be summed
。它们定义较早。
我试过了,但没有成功。
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('Set Up Data');
ss.getRange(6+constantslr+savingslr+needslr+wantslr,4,1,1).setFormulaR1C1('
=SUM(-['constantslr+savingslr+needslr+wantslr']C[0]:R[-1]C[0])');
这不是应用程序脚本公式,但如果您将要汇总的区域设置为名称范围,并使用:
=SUM(YourRangeName)
它将对整个范围求和。
只要在第一行和最后一行之间插入行,命名范围就会包含所有行。
示例:第 2 - 17 行是命名范围 SumThing
中间插入了5行:
命名范围会随着您插入行而扩展。您可以在数据底部和包含求和公式的行之间留一个空行,然后在空行上方插入行以实现相同的目的。
在 App 脚本中也很有用
我一直在我的应用程序脚本中使用命名范围,这样我就不必担心有人向 sheet 添加行或列并破坏脚本范围。要在应用脚本中执行此操作:
function useNamedRange(){
var ss = SpreadsheetApp.getActive();
// Named ranges belong to the spreadsheet, not an individual sheet
var range = ss.getRangeByName("SumThing");
// do something with the named range
}
可以用公式SUM()
来完成。但是,如果不想使用范围,只想获得某个单元格上方所有数字的总和,这里是自定义函数:
function SUMCOL() {
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getActiveCell()
var col = cell.getColumn();
var row = cell.getRow();
var range = sheet.getRange(1,col,row-1,1); // from row 1 and down to the cell with the formula
var data = range.getValues().flat().filter(Number); // skip empty cells and non-didgits
var sum = data.reduce((a,b) => a + b, 0);
return sum;
}
我正在尝试使用 Google Apps scipt 在该列的最底部添加列的求和公式。行数会有所不同,但起始单元格将保持不变。
我想使用公式而不是插入静态总和,以便用户无需 运行 任何脚本即可查看最新总和。
constantslr+savingslr+needslr+wantslr
= the number of rows to be summed
。它们定义较早。
我试过了,但没有成功。
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('Set Up Data');
ss.getRange(6+constantslr+savingslr+needslr+wantslr,4,1,1).setFormulaR1C1('
=SUM(-['constantslr+savingslr+needslr+wantslr']C[0]:R[-1]C[0])');
这不是应用程序脚本公式,但如果您将要汇总的区域设置为名称范围,并使用:
=SUM(YourRangeName)
它将对整个范围求和。
只要在第一行和最后一行之间插入行,命名范围就会包含所有行。
示例:第 2 - 17 行是命名范围 SumThing
中间插入了5行: 命名范围会随着您插入行而扩展。您可以在数据底部和包含求和公式的行之间留一个空行,然后在空行上方插入行以实现相同的目的。
在 App 脚本中也很有用
我一直在我的应用程序脚本中使用命名范围,这样我就不必担心有人向 sheet 添加行或列并破坏脚本范围。要在应用脚本中执行此操作:
function useNamedRange(){
var ss = SpreadsheetApp.getActive();
// Named ranges belong to the spreadsheet, not an individual sheet
var range = ss.getRangeByName("SumThing");
// do something with the named range
}
可以用公式SUM()
来完成。但是,如果不想使用范围,只想获得某个单元格上方所有数字的总和,这里是自定义函数:
function SUMCOL() {
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getActiveCell()
var col = cell.getColumn();
var row = cell.getRow();
var range = sheet.getRange(1,col,row-1,1); // from row 1 and down to the cell with the formula
var data = range.getValues().flat().filter(Number); // skip empty cells and non-didgits
var sum = data.reduce((a,b) => a + b, 0);
return sum;
}