如何在Apps Script中添加非谷歌账号为编辑器?解决Stackdriver报错
解决Apps Script添加非谷歌账号为编辑器的问题
我来帮你理清这个问题:你触发的Invalid email错误,本质是因为Google Workspace文档(Docs/Sheets/Slides这类)的addEditor()方法只认谷歌账号(Gmail或Google Workspace账号),直接塞非谷歌邮箱进去,系统会判定为无效地址,自然没法完成添加。
解决思路&步骤
要给非谷歌账号开编辑权限,得先调整文档的共享规则,再用专门的权限管理方法来操作:
1. 先开启文档的外部共享权限
非谷歌用户默认没法访问Google文档,所以第一步得先打开外部访问的口子。你可以用Apps Script一键设置:
function enableExternalAccess() { const fileId = "你的文档ID"; // 替换成你目标文档的ID const targetFile = DriveApp.getFileById(fileId); // 设置文档允许外部用户访问,这里选的是"任何人可查看",后续再升级编辑权限 // 如果想直接开放编辑,把Permission.VIEW改成Permission.EDIT就行 targetFile.setSharing( DriveApp.Access.ANYONE, DriveApp.Permission.VIEW ); }
要是你只想让特定非谷歌邮箱访问,也可以先设为DriveApp.Access.PRIVATE,但得确保文档的共享设置里已经开启了「允许非谷歌账号用户访问」(手动在文档共享页开,或者通过Drive API设置都可以)。
2. 用addPermission()替代addEditor()添加编辑权限
addPermission()是专门用来处理各类权限分配的方法,支持非谷歌邮箱,直接替换掉原来的addEditor()就行:
function addNonGoogleEditor() { const fileId = "你的文档ID"; const nonGoogleEmail = "email@example.com"; // 要添加的非谷歌邮箱 const targetFile = DriveApp.getFileById(fileId); try { targetFile.addPermission( DriveApp.PermissionType.USER, nonGoogleEmail, DriveApp.Role.EDITOR ); console.log(`搞定!已经把${nonGoogleEmail}设为编辑器了`); } catch (e) { console.error(`添加失败,原因:${e.message}`); } }
几个要注意的点
- 要是你用的是企业版Google Workspace,管理员可能限制了外部共享权限,代码跑失败的话记得找管理员确认一下权限设置。
- 非谷歌账号的用户收到共享邀请后,得通过链接打开文档,然后用那个邮箱收验证码验证身份,才能真正拿到编辑权限。
内容的提问来源于stack exchange,提问作者Jack Carey
相关产品推荐
相关产品推荐

