在Google工作表中,我尝试使用脚本制作受保护的范围。
我希望脚本能够创建一个只有所有者可以编辑的受保护范围,而不是其他任何人,但是当脚本运行给非所有者的用户时,脚本必须工作。
当我以电子表格的所有者身份登录并从脚本编辑器运行代码时,它运行正常 - 它会创建一个受保护的范围G1:G10,只有所有者才能编辑。
但是,当我以非所有者的用户身份登录时运行脚本时,受保护范围的权限允许用户和所有者编辑范围。我在Google开发者文档中了解this page和this 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);
}
有人可以帮忙吗?
答案 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);
}
}