2016-01-22 59 views
0

我在Google表格上創建了​​一個簡單的任務表,讓用戶輸入筆記。我在第四欄中列出了是否完成任務的是/否數據驗證。我編寫了代碼將完成的任務保存到另一個名爲「Back Log」的工作表中。這裏是我的代碼:「For」循環沒有處理所有數據行

function Clear() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main Note"); 
    var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Back Log"); 
    var u; 
    var values = ss.getDataRange().getValues(); 
    var Rangecopy 
    var rowNum2 = ss1.getLastRow(); 
    var rowNum3 = rowNum2 +1 
    var Rangecopyto 
    var colNum = 4; 

    for (u=1;u<values.length +1;u++) { 
    if (ss.getRange(u,colNum).getValue() =="Yes") { 
     Rangecopy = ss.getRange(u,1,1,5) 
     Rangecopyto = ss1.getRange(rowNum3,1,1,5); 
     Rangecopy.copyTo(Rangecopyto); 
     Rangecopy.clearContent(); 
     rowNum3 = rowNum3 +1; 
    } 
    } 
} 

該代碼做我所期望的,除了它始終保持最後一個條目不變。希望能夠找出解釋原因的任何幫助。 我已經給values.length添加了+1,這給了我正在尋找的結果,但我認爲可能有更合適的方法來執行此操作。

+0

我得到了一系列無效的錯誤開始計數,當我改變u for循環爲0。我還添加了新行首先申報價值。我編輯了代碼以反映這些更改。 –

回答

1

二維數組中的值以及電子表格中的行號被偏移1。在電子表格中排第一位,是數組中的索引0。所以,你必須對此進行調整。你有你不想處理一個標題行,所以你必須在2

var u=2; 

for (u=2;u<values.length+1;u++) { 
    if (ss.getRange(u,colNum).getValue() =="Yes") { 
+0

我將代碼更改爲上面,現在它刪除了第一行,其中包含每列的標題,但仍保留最後一行不變。雖然它可能不是理想的方式,但我認爲我通過將values.length加1來得到它。 –

+0

查看更新的答案。在2處開始「u」並將長度加1。 –