遍历 Google 电子表格自定义函数中的单元格
Iterating over cells in Google Spreadsheet Custom Function
我正在尝试在 Google 电子表格中构建一个自定义函数,基本上可以这样做:
- 假设名为 func() 的自定义函数放置在单元格 D2 中并调用为 =func(B2)
- 提供一个特定的单元格引用(比如 B2)作为起点,它会遍历 B2 之后的所有字段(所以 B3、B4、B5),而这些字段的值等于一个特定的符号(比如管道 |) .
- 对于此条件成功的每次迭代(即 B3 == '|'),它可以从其放置的单元格中添加 up/aggregate 值,向下列。因此,如果单元格 B3、B4、B5 包含 |然后 B6 不会 return 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() 上失败说索引超出范围。
我如何实际获取函数本身所在列的下一个单元格的值?
对这两个真的很迷茫,希望得到任何建议。谢谢!
这行得通。我测试了它:
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;
}
}
}
我正在尝试在 Google 电子表格中构建一个自定义函数,基本上可以这样做: - 假设名为 func() 的自定义函数放置在单元格 D2 中并调用为 =func(B2) - 提供一个特定的单元格引用(比如 B2)作为起点,它会遍历 B2 之后的所有字段(所以 B3、B4、B5),而这些字段的值等于一个特定的符号(比如管道 |) . - 对于此条件成功的每次迭代(即 B3 == '|'),它可以从其放置的单元格中添加 up/aggregate 值,向下列。因此,如果单元格 B3、B4、B5 包含 |然后 B6 不会 return 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() 上失败说索引超出范围。
我如何实际获取函数本身所在列的下一个单元格的值?
对这两个真的很迷茫,希望得到任何建议。谢谢!
这行得通。我测试了它:
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;
}
}
}