2014-01-20 88 views
0

我有一個在谷歌腳本中運行的功能。然而它沒有完成,它進入主循環,然後停止在某個地方,沒有錯誤。如果我查看執行描述,它說服務器錯誤等一會兒,然後再試一次。 我嘗試了幾次運行它,但它一直在拖延,但每次我和j的最後值都不同於以前的失速。 我真的無法想象這是一個真正的服務器錯誤,它必須是代碼。奇怪的服務器錯誤GAS

function start() { 
    var sheet1 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1'); 
    var sheet2 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1'); 
    var range1 = sheet1.getRange(1,1,54,26); 
    var range2 = sheet2.getRange(1,1,10,7); 
    var teller = 0; 

    for(var i = 1; i<=range1.getNumRows(); i++){ 
    for(var j = 1; j<=range2.getNumRows(); j++){ 
     Logger.log(i); 
     Logger.log(j); 
     if(range1.getCell(i, 8).getValue() == range2.getCell(j, 2).getValue() && range1.getCell(i, 16).getValue() == range2.getCell(j, 4).getValue() && range1.getCell(i, 19).getValue() == range2.getCell(j, 6).getValue()){ 
     range1.getCell(i,25).setValue(range2.getCell(j, 7).getValue()); 
     range2.getCell(j,1).setValue("Script") 
     teller++; 
     } 
    } 
    } 
    Logger.log(teller); 

}; 

回答

1

我想你會碰到SpreadsheetApp api太多。最佳做法是將所需的數據加載到腳本中並對其進行迭代。以你的腳本爲例:

function start() { 
    var sheet1 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1'); 
    var sheet2 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1'); 
    var range1 = sheet1.getRange(1,1,54,26); 
    var range2 = sheet2.getRange(1,1,10,7); 
    var data1 = range1.getValues(); 
    var data2 = range2.getValues(); 
    var teller = 0; 

    for(var i = 0, r = data1.length; i < r; i++){ 
    for(var j = 1, c = data2.length; j < c; j++){ 
     Logger.log(i); 
     Logger.log(j); 
     if(data1[i, 8] == data2[j, 2] && data1[i, 16] == data2[j, 4] && data1[i, 19] == data2[j, 6]){ 
     range1.getCell(i,25).setValue(data2[j, 7]); 
     range2.getCell(j,1).setValue("Script") 
     teller++; 
     } 
    } 
    } 
    Logger.log(teller); 
}; 
+0

這樣做的竅門!非常好,非常感謝 – tortilla