google-apps-script - 具有两个 onEdit 实例的共享电子表格,删除错误的行
问题描述
我正在尝试使用 Google 表格和应用程序脚本创建潜在客户管理格式。
应用程序脚本正在检查工作表Propsect或Interested的M列中的值是否已更改,并根据值将行移动到相应的工作表(Interested、Postponed、Lost或Booked)
该电子表格与我的团队共享,他们将进行更改,并与多个用户同时编辑。
现在,问题在于,一旦onEdit
触发了两个 s,并且如果两者都需要移动行,则第一个实例会正常运行,但第二个实例会删除错误的行。
例如:在工作表Prospect中,第 2 行和第 3 行的状态同时更改为Lost
& Postponed
。现在,Lost
被正确触发,但是,Postponed
实例删除了第 4 行(现在是第 3 行,因为之前删除了第 2 行)。
我试图添加lockservice
到代码中,以便只有一个实例正在运行,但这似乎并不能解决问题,因为事件对象仍在考虑未更新的行号。甚至尝试flush()
在代码的开头和结尾添加,但也没有用。
您可以在此处访问电子表格。
我的代码如下:
function Master(e) {
var lock = LockService.getScriptLock();
var SS = e.source;
var Sheet = e.source.getActiveSheet();
var Range = e.range;
if(Sheet.getName() == "Prospect" && Range.getColumn() == "13" || Sheet.getName() == "Interested" && Range.getColumn() == "13"){
moveRows(SS,Sheet,Range);
}
lock.releaseLock();
}
function moveRows(SS,Sheet,Range) {
var val1 = Sheet.getRange(Range.getRow(),1,1,10).getDisplayValues();
val1 = String(val1).split(",");
var tar_sheet = SpreadsheetApp.getActive().getSheetByName(Range.getValue());
var row = tar_sheet.getRange(tar_sheet.getLastRow()+1,1,1,val1.length).setValues([val1]);
Sheet.deleteRow(Range.getRow());
}
}
有没有办法让第二个onEdit
只有在第一个完成执行后才能运行?我想,如果发生这种情况,问题会解决吗?我希望我能够正确地传达我的问题。
解决方案
推荐阅读
- arrays - 如何将bash脚本中的json解析为数组?数组值应同时具有 key:value 格式
- reactjs - React 应用程序上的空白页面,由于 url/folder/static 无法访问构建字段中的静态文件夹 - 我想要 url/static
- python - 如何在计数器中找到复位破裂并修复它
- http - Lightsail 避免通过 HTTP 直接进行 IP 导航
- robotframework - Ride Robot Framework IDE - Mac 接口问题
- javascript - How can I generate a multiplication table with headers as a two dimensional array
- python - 使用预训练模型时是否需要 gpu?
- flutter - 在颤振飞镖中随机设置顺序
- html - 当我通过使用属性宽度和高度更改像素在网站上上传图像时,但当我再次下载它时。它只有原始尺寸
- firebase - 我的 GCP 帐户没有组织并显示“无组织”没有组织有什么缺点或负面影响?