当勾选复选框且各种其他数据验证已就位时,锁定 Google 工作表上的行

问题描述 投票:0回答:1

我希望在勾选复选框时锁定一行。 我有一个脚本,但当我勾选 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);
}
google-sheets google-apps-script locking
1个回答
0
投票

无需使用纯数据验证编写脚本,这可能是可能的。您尚未显示工作表的示例,因此这是一个通用示例,您需要适应您的情况:

  1. 通过选择 F 列(=第 6 列)中的单元格,然后选择插入/勾选框,将勾选框添加到所需行数的列中
  2. 选择数据/数据验证,然后“添加规则”、“应用到范围”,然后选择与要遵守验证规则的复选框位于同一行的单元格范围(例如 Gx:Zx)
  3. 将“条件”设置为“自定义公式是”,然后在公式框中使用
    =indirect(address(row(),6))=false
  4. 选择“高级选项”,勾选“显示所选单元格的帮助文本”,然后将字段中的文本替换为“由复选框锁定”之类的内容
  5. 确保选择“拒绝输入”(在“如果数据无效”下)
  6. 如果您希望锁定复选框列两侧的单元格(不仅仅是我的示例中所示的右侧的单元格),则需要对复选框左侧的单元格范围重复步骤 2-5盒子柱。

这样做的结果是,如果勾选了复选框,则尝试在同一行的单元格中输入任何数据将显示“已被复选框锁定”消息。在勾选相关复选框之前添加数据的所有单元格将在右上角显示红色标记,指示错误(因为它们在技术上违反了数据验证规则),但是它们的内容将被保留,并且任何尝试更改它们将导致“由复选框锁定”消息和数据恢复。

© www.soinside.com 2019 - 2024. All rights reserved.