function onEdit() {
var openRequests = SpreadsheetApp.getActive().getSheetByName('Open Requests');
var lastRowOpen = openRequests.getLastRow();
var closedRequests = SpreadsheetApp.getActive().getSheetByName('Closed Requests');
var lastRowClose = closedRequests.getLastRow();
var closed = openRequests.getRange(2,8,lastRowOpen,1).getValues();
for (var i = 0; i < lastRowOpen; i++)
{
if (closed[i][0].toString() == 'Yes')
{
var line = i+2;
if (closedRequests.getLastRow() == 1)
{
openRequests.getRange(line,1,1,9).copyTo(closedRequests.getRange(2,1,1,9));
closedRequests.getRange(2,9,1,1).setValue(new Date());
openRequests.deleteRow(line);
}
else
{
openRequests.getRange(line,1,1,9).copyTo(closedRequests.getRange(lastRowClose+1,1,1,9));
closedRequests.getRange(lastRowClose+1,9,1,1).setValue(new Date());
openRequests.deleteRow(line);
}
}
}
}
onEdit を実行するトリガーを設定しました。と呼ばれる列をチェックして、 と表示されClosed
ているかどうかを確認しますYes
。列にはClosed
、値を含むデータ検証ドロップダウン メニューがありますYes
。
したがって、ドロップダウンメニューをクリックして選択するYes
と、行全体が別のシートにコピーさClosed Requests
れ、スプレッドシートからその行が削除されOpen Requests
ます。
私が抱えている問題は、約 50% の確率で、選択Yes
した行が削除されますが、その下の行も削除されます (これが発生した場合、約 50% の確率で、2 番目に削除された行が表示されるのは数回だけです)のClosed Requests
場合、元に戻さない限り、行全体が永久に消えてしまうこともあります)。
私が知る限り、deleteRow()
関数は行全体を削除し、その下のすべての行を 1 行上に移動して空白を埋めます。したがって、削除される行の下の行は同じ行にシフトされ、削除されます。ただし、関数が2回呼び出される理由はわかりません。
いくつかの遅延を追加しようとしましたが、機能していないようです。