所以我正在编写一个脚本,我们给出了在同一行中具有特定标记的所有数据的总和。
Col 1 | Col 2
-------+---------
grp1 | 2
grp1 | 1
grp2 | 1
-------+---------
如果我要传递此函数grp1,结果将是3.
当我使用这个脚本超过1000行时,我会在短时间(如15秒)后收到错误“内部错误执行自定义函数”。我认为这可能是暂停,但它在30秒之前发生。有什么想法吗?
function collectgrpdata(group, startrow) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var lastrow = sheet.getLastRow();
var currentcell = sheet.getActiveCell();
var col = currentcell.getColumn();
var total = 0;
for(var x = startrow; x <= lastrow; x++) {
var v = sheet.getRange(x, col).getValue();
if(v != "" ) {
if (sheet.getRange(x, 2).getValue() == group) {
total += v;
}
}
}
return total
}
答案 0 :(得分:2)
您的问题很可能是因为您对getRange和getValue进行了很多调用。
您可能正在点击quota limit of calls。
而不是那样做一个大调用来获取所有数据,然后使用它:
function collectgrpdata2(group, startrow) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var currentcell = sheet.getActiveCell();
var col = currentcell.getColumn();
var range = sheet
.getRange(startrow,
col,
sheet.getLastRow() - startrow + 1,
sheet.getLastColumn() - col + 1)
var data = range.getValues();
return data
.filter(function(row) {return row[0] === group;})
.map(function(row) {return row[1];})
.concat(0)
.reduce(function(x,y) {return x+y;});
}