确保列范围扩展为包括新插入的行

时间:2016-04-01 14:22:38

标签: google-apps-script google-sheets

我有一张电子表格,上面放着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")');
}

1 个答案:

答案 0 :(得分:0)

可以使用indirect(string)

创建不随行插入/删除而更改的单元格引用
=sum(indirect("A2"):A26)

这意味着无论发生什么插入,范围始终以单元格A2开始。

另一种方法

为了完整性,我将指出另一种处理方法:在范围中包含第1行,以便范围内进行插入。根据公式的不同,它们可能已经忽略了标题行的文本内容。如果他们不这样做,您可以明确地排除第一行,如下所示:

=sum(filter(A1:A26, row(A2:A26)>1))