Google脚本 - 15秒后出现内部错误

时间:2016-10-04 18:34:55

标签: google-apps-script google-sheets

所以我正在编写一个脚本,我们给出了在同一行中具有特定标记的所有数据的总和。

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
}

1 个答案:

答案 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;});
}