我希望在勾选复选框时锁定一行。 我有一个脚本,但当我勾选 Col6 中的复选框时,我仍然可以编辑该行。 当勾选 Col6 中的复选框时,我需要为包括我自己(所有者)在内的所有人锁定所有行。如果未勾选,则可以编辑该行的其余部分。 我想我错过了一些明显的东西,如果这是我的一个愚蠢的错误,那么很抱歉。
这是我目前的脚本。
function lockRow (e){
const sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (e.range.columnStart != 6) return;
let protection = sh.getRange(e.range.rowStart,1,1,sh.getMaxColumns()).protect();
protection.removeEditor(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
无需使用纯数据验证编写脚本,这可能是可能的。您尚未显示工作表的示例,因此这是一个通用示例,您需要适应您的情况:
=indirect(address(row(),6))=false
这样做的结果是,如果勾选了复选框,则尝试在同一行的单元格中输入任何数据将显示“已被复选框锁定”消息。在勾选相关复选框之前添加数据的所有单元格将在右上角显示红色标记,指示错误(因为它们在技术上违反了数据验证规则),但是它们的内容将被保留,并且任何尝试更改它们将导致“由复选框锁定”消息和数据恢复。