2016-06-20 156 views
2

我在嘗試使用Google腳本刪除與特定值匹配的行時遇到了最奇怪的錯誤。使用Google Apps腳本刪除Google表格中的行

這裏是我的代碼:

function myFunction() { 
    var doc = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = doc.getSheetByName("file.csv"); 

    var values = sheet.getRange("N2:N").getValues(); 

    var row_del = new Array(); 

    for(var i=0;i<values.length;i++) 
    { 
    if(values[i] == 'del'){ 
     row_del.push(i+2); // This line was added for debugging purposes. 
    // sheet.deleteRow(i+2) was the line that was in this condition 
    // (i+2) is used because row 1 has headers and the range starts from 0. 
    } 
    } 

// Logger.log(row_del); 
// GmailApp.sendEmail("my_email_address", "subject", row_del) 

    for (var i = 0; i < row_del.length; i++) 
    { 
    sheet.deleteRow(row_del[i]); 
    } 

} 

我寫拾起應刪除的行數,但不是所有的這些行中我第一次嘗試刪除該代碼。我應該多次執行我的腳本以刪除這些行。

如果我的代碼有錯誤,應該顯示出來,如果邏輯錯誤,則必須刪除不正確的行。我沒有遇到這些情況,我應該多次執行此功能。

有什麼,我在這裏失蹤?

+1

嘗試從下往上刪除:'爲(VAR I = row_del.length - 1;我> = 0; i--) { sheet.deleteRow(row_del [i]); }' –

+0

這工作..謝謝很多湯。你能告訴我爲什麼我的代碼不工作嗎?你的邏輯和我的邏輯不一樣嗎? –

+0

你可以使用sheet.deleteRows(1,2);以及一次刪除所有行 –

回答

3

從工作表中刪除一行時,即使腳本繼續運行,它下面的行也會重新編號。如果腳本隨後嘗試刪除這些行,則結果是不可預知的。出於這個原因,刪除行時應該從下到上進行。在你的情況下,像這樣:

for (var i = row_del.length - 1; i>=0; i--) { 
    sheet.deleteRow(row_del[i]); 
} 
+0

非常感謝。我現在明白這一點.. –

0

所以,這是它應該是什麼樣子?

function myFunction() { 
 
    var doc = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sheet = doc.getSheetByName("Sheet1"); 
 

 
    var values = sheet.getRange("A:A").getValues(); 
 

 
    var row_del = new Array(); 
 

 
    for(var i=0;i<values.length;i++) 
 
    { 
 
    if(values[i] == 'N'){ 
 
     row_del.push(i+2); // This line was added for debugging purposes. 
 
    // sheet.deleteRow(i+2) was the line that was in this condition 
 
    // (i+2) is used because row 1 has headers and the range starts from 0. 
 
    } 
 
    } 
 

 
// Logger.log(row_del); 
 
// GmailApp.sendEmail("my_email_address", "subject", row_del) 
 

 
    for (var i = row_del.length - 1; i>=0; i--) { sheet.deleteRow(row_del[i]); } 
 

 
}

0

增量我只有在你沒有刪除行

function del_F_rows(){ 
var i=1; 
while(!sht_balanceHistory.getRange(i,1).isBlank()){ 
    if(sht_balanceHistory.getRange(i,3).getValue()=="F") 
    sht_balanceHistory.deleteRow(i); 
    else 
    i=i+1; 
    } 
} 
相關問題