根据单元格中的数据保护行(是/否)

2023-11-30

我有一张带桌子的床单。当我或我的一位编辑更改 F 列中单元格的数据(使其不为空)时,我需要row为除我(所有者)之外的所有人提供保护。

enter image description here

我在这里看到了几个类似的问题,但没有人提供工作脚本......我将不胜感激任何帮助。


我相信您目前的情况和您的目标如下。

  • 您的电子表格已与某些用户共享。
  • 当用户编辑“F”列的下拉列表时,当该值不为空时,想要保护“A”到“F”列的行。
  • 行受到保护后,您只想由所有者进行编辑。
  • 您希望使用 Google Apps 脚本来实现此目的。

在这种情况下,我想建议使用可安装的 OnEdit 触发器运行脚本。示例脚本如下。

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中,然后请安装 OnEdit 触发器到该函数myFunction.

function myFunction(e) {
  const sheetName = "Sheet1"; // Please set your sheet name.

  const range = e.range;
  const sheet = range.getSheet();
  const value = range.getValue();
  const row = range.getRow();
  if (sheet.getSheetName() != sheetName || range.getColumn() != 6 || row == 1 || value == "") return;
  const p = sheet.getRange(`A${row}:F${row}`).protect();
  const owner = Session.getActiveUser().getEmail();
  p.getEditors().forEach(f => {
    const email = f.getEmail();
    if (email != owner) p.removeEditor(email);
  });
}
  • 在此脚本中,假设下拉列表被放入示例图像中的单元格“F2:F”中。如果你想改变范围,请修改上面的脚本。
  • 当你使用这个脚本时,由非所有者的用户,请编辑“Sheet1”的“F”列的下拉列表。这样,当下拉列表的值不为空时,脚本就可以工作。并且该行受到保护。编辑者只是所有者。

参考:

  • 可安装的触发器
  • 类范围的protect()
  • 等级保护

Added:

About 您在评论中提出的第二个问题,

非常感谢!!它起作用了,我现在知道了一些关于触发器的知识——对我来说是一个新事物。是否可以将此功能扩展到具有相同结构的 3 个工作表(在一个电子表格内)?表 1、表 2、表 3...

当您想将上述脚本用于特定工作表(例如“Sheet1”、“Sheet2”、“Sheet3”)时,以下示例脚本怎么样?

示例脚本:

function myFunction(e) {
  const sheetNames = ["Sheet1", "Sheet2", "Sheet3"]; // Please set the sheet names you want to run the script.

  const range = e.range;
  const sheet = range.getSheet();
  const value = range.getValue();
  const row = range.getRow();
  if (!sheetNames.includes(sheet.getSheetName()) || range.getColumn() != 6 || row == 1 || value == "") return;
  const p = sheet.getRange(`A${row}:F${row}`).protect();
  const owner = Session.getActiveUser().getEmail();
  p.getEditors().forEach(f => {
    const email = f.getEmail();
    if (email != owner) p.removeEditor(email);
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据单元格中的数据保护行(是/否) 的相关文章

随机推荐