2016-07-27 103 views
0

我目前正在爲我的公會編寫統計電子表格腳本,它讀出一個人的班級並在統計表中統計它。「for」循環Google Spreadsheet值不循環

由於某種原因for循環不起作用。當我執行腳本時,它什麼都不做。 for循環之前的所有內容似乎都起作用。我使用了調試器,並從for循環的位置設置了一個調試點,窗口在1秒後打開和關閉。

這是我的代碼,截至目前:

function addToStatistik() { 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();   

    var source_sheet = spreadsheet.getSheetByName("Raid Montag");  
    var source_range_names = source_sheet.getRange("C4:C13"); 
    var source_range_setup_boss1 = source_sheet.getRange("M4:M13"); 

    var target_sheet = spreadsheet.getSheetByName("Statistik");  
    var target_range_names = target_sheet.getRange("A4:A31"); 
    var target_range_boss1 = target_sheet.getRange("K4:S31"); 


    target_sheet.getRange(2,1).setValue("Debug1"); //testing stuff 
    for (var i=0; i < source_range_names.length; i++) { 
    for (var j=0; j < target_range_names.length; j++) { 
     if (source_range_names[i][0] == target_range_names[j][0]) { 
     if (source_range_setup_boss1[i][0].indexOf("War") > -1) { 
      target_sheet.getRange(9,5).setValue("TEST"); 
     } 
     } 
    } 
    } 
} 

有人能找到有任何錯誤?我找不到任何東西,谷歌也不幫我。

回答

2

您正在獲取範圍,但不是值。此行:

var source_range_names = source_sheet.getRange("C4:C13"); 

得到一個範圍,但沒有任何值。

應該是:

var source_range_names = source_sheet.getRange("C4:C13").getValues(); 

外環永遠循環。沒有一個範圍的length

for (var i=0; i < source_range_names.length; i++) { 

不需要改變上述行,但目前的變量source_range_names是一個範圍,而不是值的2D陣列。

+0

謝謝!現在你已經說過了,這很有道理,但我沒有想到這一點。我是否也可以使用上面用f.e設置的範圍。 .setValue稍後,如果我現在在每個範圍上追加.getValues()? – derRAV3N

+0

如果您需要多次使用範圍(或任何變量),您可能只想爲該範圍設置一個變量。然後你可以重用這個變量。你是否應該爲某些東西創建一個變量取決於你需要重複使用它的次數,以及代碼的可讀性。如果您的代碼在進行更改後很快就讀取了值,您可能需要使用SpreadsheetApp.flush()來更新待執行的更改。 –

+0

好的,謝謝,我會研究這個。另一個問題,這不是同一個話題,但是它有可能在一個範圍內獲得一個範圍?我有「var target_range_boss1 = target_sheet.getRange(」K4:S31「);」例如,現在想要在這個範圍內設置一個Cell,如何實現? – derRAV3N

0

之前,你遍歷你需要得到的範圍內的值,來實現這一點,你需要使用方法getValues()getDisplayValues()

function leFunction() { 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();   
    var source_sheet = spreadsheet.getSheetByName("Raid Montag"); 
    var source_range_names = source_sheet.getRange("A1:C13"); 
    var values_range_names = source_range_names.getDisplayValues(); 

    Logger.log(values_range_names); 

    for (var i=0; i < values_range_names.length; i++) { 
    // Do Something 
    } 

}