我正在尝试在Google电子表格中构建一个自定义函数,基本上可以这样做: - 假设称为func()的自定义函数放在单元格D2中并调用为= func(B2) - 提供一个特定的单元格引用(比如说B2)作为起始点,它会遍历列后B2的所有字段(所以B3,B4,B5),而这些字段的值等于特定的符号(比如pipe |) 。 - 对于此条件成功的每次迭代(即B3 =='|'),它可以从列放置的单元格中添加/聚合值。如果细胞B3,B4,B5含有|然后B6不会返回D3 + D4 + D5的值。
例如,如果在此电子表格中:
在单元格B10中,函数应生成值8(1 + 3 + 4),在单元格B15中,函数应生成值11(5 + 6)。
我想出了类似的东西:
function sumByPipe(startRange) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(startRange)
var sum = 0;
for (var row_num = 1; row_num < 128; row_num ++) {
var cell = range.getCell(row_num, 1);
var cellValue = cell.getValue();
if (cellValue == '|') {
sum += 1;
}
}
return sum;
}
并且真的陷入了两个地方:
函数似乎在调试器中起作用,但是当我从电子表格调用它时,它在getRange()函数调用时失败,说没有这样的范围。如果我用getRange('A2')的静态调用替换它,那部分可以工作,但是在getCell()表示索引超出范围时失败。
如何实际获取放置函数本身的列中下一个单元格的值?
对这两个人真的很失落,并希望得到任何建议。谢谢!
答案 0 :(得分:2)
这很有效。我测试了它:
function sumByPipe(startRange) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(startRange)
var sum = 0;
var startColumn = range.getColumn();
var startRow = range.getRow();
for (var row_num = startRow; row_num < startRow+128; row_num++) {
var cellWithPipe = sheet.getRange(row_num, startColumn-1).getValue();
var cellValue = sheet.getRange(row_num, startColumn).getValue();
if (cellWithPipe === '|') {
sum += cellValue;
} else {
//If pipe is no longer present, stop and return sum
return sum;
}
}
}