2016-06-20 16 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; i>の= 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; 
    } 
} 
関連する問題