2016-06-20 161 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; 
    } 
} 
相关问题