2016-10-04 5 views
0

私は同じ行に特定のタグを持つすべてのデータの合計を与えるスクリプトを作成しています。Google Script - 15秒後の内部エラー

Col 1 | Col 2 
-------+--------- 
grp1 | 2 
grp1 | 1 
grp2 | 1 
-------+--------- 

私は、この関数を渡すことだった場合、結果は3

私は1000行の上にこのスクリプトを使用することになるとき、私は短い時間後にエラー「カスタム関数を実行する内部エラー」を得るGRP1 (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 
} 

答えて

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

おかげでロビン!それを撃つだろう。 – jspada

関連する問題