在谷歌表格中,我试图使用脚本来制作受保护的范围。
我希望脚本创建一个只有所有者可以编辑的受保护范围,其他人不能编辑,但是脚本在为不是所有者的用户运行时必须工作。
当我以电子表格的所有者身份登录并从脚本编辑器运行代码时,它运行良好 - 它创建了一个只有所有者可以编辑的受保护范围 G1:G10。
但是,当我以不是所有者的用户身份登录时运行脚本时,受保护范围的权限允许用户和所有者都可以编辑范围。我知道谷歌开发者文档上的这个页面和这个页面,但是我看不到任何对我有帮助的东西。
这是我的代码:
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);
}
任何人都可以帮忙吗?
removeEditors()不允许删除当前用户:
从受保护工作表或范围的编辑器列表中删除给定的用户数组。请注意,如果任何用户是具有编辑权限的 Google 群组的成员,或者如果域中的所有用户都具有编辑权限,则这些用户仍然可以编辑受保护区域。电子表格的所有者和当前用户都不能被删除。
但是,您可以使用由所有者创建的可安装触发器,该触发器将以创建触发器 [所有者]的用户身份运行您的方法- 即使它是由其他用户触发的。setProtections()
示例:可安装触发器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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句