这是编辑器运行的电子表格中的脚本:
function ed2view() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var eds = ss.getEditors();
var ed = eds[1];
ss.removeEditor(ed);
ss.addViewer(ed);
}
它不起作用,因为很显然,到addViewer()时,权限已被撤销。
如果只是addViewer(),而没有以前的removeEditor(),则也无法正常工作:If the user was already on the list of editors, this method has no effect。
另一方面,通过电子表格的界面,编辑者可以降低其对查看器的访问权限。
请告知如何正确更改访问权限。
答案 0 :(得分:0)
如果您想让编辑者更改其他编辑者的状态,请尝试以下操作:
SELECT (regexp_split_to_array(fans.device_info, ';'))[1] as device
在您的代码中,您尝试将function ed2view() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var editorArray = ss.getEditors();
var userMail = editorArray[1].getEmail();
ss.removeEditor(editorArray[1]);
ss.addViewer(userMail);
}
中的User
对象而不是string
类型的电子邮件地址作为参数传递
如果您是编辑者而不是所有者,并且您想很好地使用App Script更改权限状态,那么您仍然不能,但编辑者仍可以进入电子表格的共享设置并将其权限状态更改为“已读” -only”,然后确认。
不幸的是,您无法以编程方式进行操作。
答案 1 :(得分:0)
如果您不通过电子表格文件操纵访问,而是使用高级驱动器服务,则该任务具有解决方案。
function run() {
driveChangeMeRole_(FILE_ID, EMAIL);
}
/**
* Downgrade you in the rights from the editor to the viewer
* @param {string} fileId The file id
* @param {string} email You can pass your email and downgrade youself
* @returns {void}
*/
function driveChangeMeRole_(fileId, email) {
var permissionId = Drive.Permissions.getIdForEmail(email);
var resource = Drive.newPermission();
resource.role = 'reader';
/* You can stay as a commenter
resource.additionalRoles = ['commenter']; */
Drive.Permissions.update(resource, fileId, permissionId.id);
}
您需要在Google API Console中启用Drive API:脚本编辑器:资源/高级功能。 该任务由@oshilaer here
决定