我正在尝试使用Google表格进行数据记录和验证。例如,人员A在A1:C1中输入数据,然后当人员B在D1处勾选复选框时,它将锁定A1:C1以防止人员A再次编辑。每行都会重复此过程。
我设法使代码正常工作。但是,似乎有时候当人B快速勾选复选框时,代码可能会忽略一两行,并且不会锁定每一行。例如,当人B勾选D1,D2和D3时,系统仅锁定1和3行。
如何优化代码,使其始终锁定每一行而不会丢失一两个?
function onEdit(e){
var row = e.range.getRow();
var col = e.range.getColumn();
var range = sheet.getRange(row, 1, 1,3)
var protectSs = range.protect().setDescription('Protect row ' + row);
var a = sheet.getRange(row,4,1,1).getValues();
if (col == 4){
if (a == "true") {
var me = Session.getEffectiveUser();
protectSs.addEditor("guest1@gmail.com");
protectSs.removeEditor("guest1@gmail.com");
Logger.log(me);
}
else if (a == "false") {
protectSs.addEditor("guest1@gmail.com");
protectSs.removeEditor("guest1@gmail.com");
}
}
}
答案 0 :(得分:0)
尝试一下:
首先在第4列中放置复选框,从而删除该范围内的任何其他可能的条目。然后尝试此脚本。
function onEdit(e){
var rg=sheet.getRange(e.range.rowStart,1, 1,3)
var protectSs=range.protect().setDescription('Protect row ' + e.range.rowStart);
if (e.range.columnStart==4){
if (e.value=="TRUE") {
protectSs.addEditor("guest1@gmail.com");
protectSs.removeEditor("guest1@gmail.com");
}
else {
protectSs.addEditor("guest1@gmail.com");
protectSs.removeEditor("guest1@gmail.com");
}
}
}