【问题标题】:Google Script - Internal Error after 15 secondsGoogle 脚本 - 15 秒后出现内部错误
【发布时间】:2016-10-04 18:34:55
【问题描述】:

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

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
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您的问题很可能是由于您多次调用 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;});
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多