Jac*_*ack 0 javascript google-sheets google-apps-script
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我已经设置了一个触发器来运行onEdit.它的作用是检查一个被调用的列Closed以查看它是否显示Yes.该Closed列有一个数据验证下拉菜单,其中包含值Yes.
因此,当我单击下拉菜单并选择时Yes,它应该将整行复制到另一个名为的工作表,Closed Requests然后从电子表格中删除该行Open Requests.
我遇到的问题是,大约50%的时间,它删除我选择的行Yes,但它也删除它下面的行(大约50%的时间发生这种情况,只有一些时间,第二个删除的行显示在Closed Requests其他时候,整行只是永远消失,除非我撤消).
据我所知,该deleteRow()函数删除整行并将其下方的所有行向上移动以填充空白.因此,要删除的行下方的行会向上移动到同一行并被删除.我不知道为什么函数会被调用两次.
我尝试添加一些延迟但它似乎没有工作.
function onEdit(e) {
var eRange = e.source.getActiveRange();
var openRequests = SpreadsheetApp.getActive().getSheetByName('Open Requests');
var closedRequests = SpreadsheetApp.getActive().getSheetByName('Closed Requests');
var nextRowClose = (closedRequests.getLastRow()?closedRequests.getLastRow()+1:2);
if(eRange.getSheet().getName()=="Open Requests" && eRange.getColumn()==8 && eRange.getValue()=="Yes") {
openRequests.getRange(eRange.getRow(), 1, 1, 9)
.copyTo(closedRequests.getRange(nextRowClose, 1));
closedRequests.getRange(nextRowClose, 9).setValue(new Date());
openRequests.deleteRow(eRange.getRow());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |