我有一张电子表格,上面放着3张图表。 每个都有一个标题(第1行,图表1的标题被冻结)。 图1数据目前在A2至P26范围内。 图1中的数据在图1(A27到P27)的底行以及图2和图3的单元格中进行求和并引用。
我一直在编写一个脚本,一旦分配给一个按钮,就会在工作表的顶部插入一个新的第2行(在第1行下面,因为标题第1行被冻结)。 新插入的行保留了下面的图表1行的条件格式,以及所需的3个公式,但其数据不包含在工作表中其他任何汇总中。
有没有办法确保每次插入新的第2行时,引用A2到P26的公式总是包含新插入的第2行?
这是我的代码:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menu = [{name: 'Insert Row', functionName: 'insertRow'}];
ss.addMenu('Insert', menu);
}
function insertRow() {
var spsh = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spsh.getSheetByName('testSheet');
sheet.activate();
sheet.setFrozenRows(1);
sheet.insertRows(2);
var range = sheet.getRange('G2');
range.setFormula('=sum(E2:F2)');
var range = sheet.getRange("O2");
range.setFormula('=iF(K2="ordered", G2, "$0.00")');
var range = sheet.getRange("P2");
range.setFormula('=iF(K2="lost", G2, "$0.00")');
}
答案 0 :(得分:0)
可以使用indirect(string)
:
=sum(indirect("A2"):A26)
这意味着无论发生什么插入,范围始终以单元格A2开始。
为了完整性,我将指出另一种处理方法:在范围中包含第1行,以便在范围内进行插入。根据公式的不同,它们可能已经忽略了标题行的文本内容。如果他们不这样做,您可以明确地排除第一行,如下所示:
=sum(filter(A1:A26, row(A2:A26)>1))