Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 根据单元格中的数据保护行(是/否)_Google Apps Script_Google Sheets - Fatal编程技术网

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

Google apps script 根据单元格中的数据保护行(是/否),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一张带桌子的床单。当我或我的某个编辑器更改F列中单元格的数据(使其不为空)时,我需要行对除我(所有者)以外的所有人进行保护 我在这里看到了几个类似的问题,但没有人给出一个工作脚本。。。我将感谢您的帮助。我相信您目前的状况和目标如下 您的电子表格与某些用户共享 当用户编辑列“F”的下拉列表时,如果该值不为空,则希望保护列“A”到“F”的行 行被保护后,您希望仅由所有者进行编辑 您希望使用谷歌应用程序脚本实现这一点 在本例中,我建议使用可安装的OnEdit触发器运行脚本。示例脚本如下所示

我有一张带桌子的床单。当我或我的某个编辑器更改F列中单元格的数据(使其不为空)时,我需要行对除我(所有者)以外的所有人进行保护


我在这里看到了几个类似的问题,但没有人给出一个工作脚本。。。我将感谢您的帮助。

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

  • 您的电子表格与某些用户共享
  • 当用户编辑列“F”的下拉列表时,如果该值不为空,则希望保护列“A”到“F”的行
  • 行被保护后,您希望仅由所有者进行编辑
  • 您希望使用谷歌应用程序脚本实现这一点
在本例中,我建议使用可安装的OnEdit触发器运行脚本。示例脚本如下所示

示例脚本: 请将以下脚本复制并粘贴到电子表格和的脚本编辑器中

  • 在这个脚本中,它假设下拉列表放在示例图像的单元格“F2:F”中。如果要更改范围,请修改上述脚本
  • 当您由非所有者的用户使用此脚本时,请编辑“Sheet1”中“F”列的下拉列表。这样,当下拉列表的值不为空时,脚本工作。并且,该行受到保护。编辑只是所有者
参考资料:
补充: 关于,


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

当您想对特定的工作表(如“Sheet1”、“Sheet2”、“Sheet3”)使用上述脚本时,下面的示例脚本如何

示例脚本:
非常感谢你!!它起作用了,我现在知道了一些关于触发器的事情——对我来说是一件新事物。是否可以将此功能扩展到具有相同结构的3张图纸(在一个电子表格中)?第1页,第2页,第3页…@Sanli感谢您的回复。我很高兴你的问题解决了。关于第二个问题,我又添加了一个示例脚本。你能确认一下吗?如果这不是你期望的方向,我道歉。这正是我的问题的决定!!它适用于多张图纸。再次感谢你@谢谢你的回复。我很高兴你的问题解决了。
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);
  });
}
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);
  });
}