Google Apps Script を使用して特定の値に一致する行を削除しようとしたときに、奇妙なエラーが発生しました。
これが私のコードです:
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
シートから行が削除されると、スクリプトの実行が継続されている間も、その下の行の番号が付け直されます。スクリプトがその後それらの行も削除しようとすると、結果は予測できません。このため、行を削除するときは下から上に向かって進める必要があります。あなたの場合は、次のようになります。
for (var i = row_del.length - 1; i>=0; i--) {
sheet.deleteRow(row_del[i]);
}