我正在尝试使用 google sheet 进行数据记录和验证。例如A在A1:C1输入数据,B在D1勾选checkbox时,会锁住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");
}
}
}
最佳答案
试试这个:
首先将复选框放在第 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");
}
}
}
关于javascript - 如何优化我的代码以确保它锁定每个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963079/