无法使用脚本 - Google工作表删除有效用户编辑受保护范围的权限

时间:2017-08-08 08:24:03

标签: javascript google-sheets

在Google工作表中,我尝试使用脚本制作受保护的范围。

我希望脚本能够创建一个只有所有者可以编辑的受保护范围,而不是其他任何人,但是当脚本运行给非所有者的用户时,脚本必须工作。

当我以电子表格的所有者身份登录并从脚本编辑器运行代码时,它运行正常 - 它会创建一个受保护的范围G1:G10,只有所有者才能编辑。

但是,当我以非所有者的用户身份登录时运行脚本时,受保护范围的权限允许用户和所有者编辑范围。我在Google开发者文档中了解this pagethis page,但我无法看到任何可以帮助我的内容。

这是我的代码:

function setProtections() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var owner = ss.getOwner();
  var effectiveUser = Session.getEffectiveUser();
  var range = ss.getRange('G1:G10');
  var protection = range.protect()
  var editors = protection.getEditors();
  protection.removeEditors(editors);
  protection.addEditor(owner);
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

removeEditors()不允许删除当前用户:

  

从受保护工作表或范围的编辑器列表中删除给定的用户数组。请注意,如果任何用户是具有编辑权限的Google网上论坛的成员,或者该域中的所有用户都具有编辑权限,则这些用户仍可以编辑受保护区域。 无法删除电子表格的所有者和当前用户。

但是,您可以使用所有者创建的Installable Trigger作为创建触发器[所有者setProtections()方法>] - 即使它是由另一个用户触发的。

示例:Installable Trigger onEdit()

function installedOnEditTrigger (e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];

  //Checks if the sheet edit happened in the 7th column "G"
  if (e.range.getColumn() == 7) {
    var range = ss.getRange('G1:G10');
    var protection = range.protect()
    var editors = protection.getEditors();
    //Removes all editors - owners can not be removed
    protection.removeEditors(editors);
  }
}