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

Google apps script Google脚本-15秒后出现内部错误,google-apps-script,google-sheets,Google Apps Script,Google Sheets,所以我写了一个脚本,我们给出了在同一行中具有特定标记的所有数据的总和 Col 1 | Col 2 -------+--------- grp1 | 2 grp1 | 1 grp2 | 1 -------+--------- 如果我通过这个函数grp1,结果将是3 当我在1000行以上使用这个脚本时,我会在短时间(比如15秒)后得到一个错误“执行自定义函数时出现内部错误”。我想这可能是超时,但它发生在30秒之前。有什么想法吗 function collectgrpd

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

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
}
函数collectgrpdata(组,startrow){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var lastrow=sheet.getLastRow();
var currentcell=sheet.getActiveCell();
var col=currentcell.getColumn();
var合计=0;

对于(var x=startrow;x您的问题最有可能是由于您对getRange和getValue进行了大量调用。
你可能是在打你的电话

不要这样做,而是打一个大电话获取所有数据,然后处理这些数据:

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

您的问题很可能是由于您对getRange和getValue进行了大量调用。
你可能是在打你的电话

不要这样做,而是打一个大电话获取所有数据,然后处理这些数据:

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

谢谢罗宾!会给它一次机会的。谢谢罗宾!会给它一次机会的。