修改Google Sheets权限:编辑者转查看者代码报错求助
问题分析与解决方案
错误原因
报错TypeError: file.getEditors is not a function的核心问题出在:
你把file变量赋值成了单个工作表(Sheet)对象(通过getActiveSheet()获取),但getEditors()、getAccessControlList()这类权限管理方法是属于整个电子表格(Spreadsheet)对象或者Drive文件对象的,Sheet对象根本没有这些方法,所以才会触发报错。
修正后的代码
下面的代码能实现把所有拥有编辑权限的用户转为查看者(要是想转成评论者,替换对应的权限代码就行):
function cambiarPermisos() { // 先拿到整个电子表格对象,不是单个工作表 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 获取所有有编辑权限的用户 var editors = spreadsheet.getEditors(); // 逐个处理编辑者 for (var i = 0; i < editors.length; i++) { var user = editors[i]; var email = user.getEmail(); // 跳过自己,别把自己的编辑权限搞没了 if (email === Session.getActiveUser().getEmail()) { continue; } // 移除编辑权限,添加查看权限 spreadsheet.removeEditor(email); spreadsheet.addViewer(email); // 如果要转成评论者,把上面两行换成下面的: // spreadsheet.removeEditor(email); // spreadsheet.addCommenter(email); } }
额外提醒
- 一定要跳过自己的账号,不然运行后自己可能失去编辑权限,没法再修改表格或脚本。
- 如果改完代码还是报错,那才可能是域管理员限制了脚本修改权限的功能,得联系管理员确认设置。
- Google Apps Script里的权限类型说明:
DriveApp.AclRole.OWNER:所有者DriveApp.AclRole.EDITOR:编辑者DriveApp.AclRole.COMMENTER:评论者DriveApp.AclRole.VIEWER:查看者
内容的提问来源于stack exchange,提问作者Carlos E Gomez Rivera
相关产品推荐
相关产品推荐

