如何解决Google Apps Script中folder.addViewer()报Drive服务异常错误
问题排查与解决方案
1 先修复代码显性语法错误
你提供的代码中viewers的映射函数存在JS自动分号插入(ASI)导致的逻辑错误:
viewers = viewers.map(function(item) { return item.getEmail().toLowerCase(); }).sort();
这里return单独占一行,JS会自动在return后补充分号,直接返回undefined,后续所有权限校验逻辑全部失效,会出现重复添加已存在用户的情况,大概率是触发Drive接口报错的直接原因。修改为:
viewers = viewers.map(function(item) { return item.getEmail().toLowerCase(); }).sort();
2 其他触发"Exception: Service Error: Drive"的常见原因及修复
- 权限不足:当前运行脚本的账号对目标文件夹没有管理权限,或者填写的
folderid错误。确认文件夹ID正确,且运行脚本的账号是文件夹所有者、或拥有文件夹的管理共享权限。 - 待添加邮箱非法:邮箱存在空格、格式不符合标准,或者非谷歌账号(部分企业外部账号未注册谷歌账号也会触发报错),可以给权限添加逻辑加异常捕获,跳过非法账号:
for (var i = 0; i < userstoadd.length; i++) { if (viewers.indexOf(userstoadd[i]) == -1 && editorstoadd.indexOf(userstoadd[i]) == -1) { try { folder.addViewer(userstoadd[i]); console.log("成功添加查看者:" + userstoadd[i]); } catch (e) { console.log("添加查看者失败:" + userstoadd[i] + ",错误信息:" + e.toString()); } } } for (var i = 0; i < editorstoadd.length; i++) { if (editors.indexOf(editorstoadd[i]) == -1) { try { folder.addEditor(editorstoadd[i]); console.log("成功添加编辑者:" + editorstoadd[i]); } catch (e) { console.log("添加编辑者失败:" + editorstoadd[i] + ",错误信息:" + e.toString()); } } }
- 接口调用限流:如果单次添加的用户数超过30人,Drive接口会触发限流报错,可以在每次添加操作后加1秒延迟,插入代码
Utilities.sleep(1000);即可。 - 企业域共享限制:如果待添加用户是你司谷歌Workspace域外部账号,管理员设置了禁止外部共享也会触发报错,联系域管理员确认共享策略即可。
内容的提问来源于stack exchange,提问作者UOM Tech Specialist
相关产品推荐
相关产品推荐

