2016-10-04 28 views
0

因此,我正在編寫一個腳本,我們給出了在同一行中具有特定標記的所有數據的總和。谷歌腳本 - 15秒後出現內部錯誤

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 
} 

回答

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