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% 的时间发生这种情况,第二个删除的行只显示一些时间向上Closed Requests
,其他时候整行会永远消失,除非我撤消)。
据我所知,该deleteRow()
函数删除整行并将其下方的所有行向上移动一行以填充空白。因此,要删除的行下方的行将向上移动到同一行并被删除。我不知道为什么该函数被调用两次。
我尝试添加一些延迟,但它似乎不起作用。