文件removeEditor问题(DriveApp)

时间:2014-09-01 19:27:03

标签: google-apps-script

我在尝试从文件中删除活动用户编辑器时遇到问题。 当我尝试以下代码时,它可以正常工作:

function testOwner() {
   var theFile = DriveApp.createFile('New Text File', 'Hello, world!');
   theFile.setOwner('anemail@mydomain.fr');
   theFile.removeEditor(Session.getActiveUser().getEmail());
}

但是当我使用'makeCopy'方法时,我收到一条消息错误,即使编辑器已被删除也会停止脚本。这是代码:

function testOwner2() {
   var template = DriveApp.getFileById(TEMPLATE_ID);
   var theFile = template.makeCopy('Name');
   theFile.setOwner('anemail@mydomain.fr');
   theFile.removeEditor(Session.getActiveUser().getEmail());
}

removeEditor行上的错误消息:'Impossible de trouver l'élémentinsentantàcetidentifiant。 Vousn'êtespeut-êtrepasautoriséàyaccéder。'意思是'找不到与此ID匹配的任何元素。也许您无权访问它

我没有发现任何问题。这是一个众所周知的问题吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

当你.makeCopy()时,所有编辑都会被移除以获取新文件。

除了帮助调试之外,还可以使用Logger并查看日志......

function testOwner2() {
  var template = DriveApp.getFileById(TEMPLATE_ID);
  var theFile = template.makeCopy('Name');
  theFile.setOwner('anemail@mydomain.fr');

  var editors = theFile.getEditors();
  for ( var i in editors ) { Logger.log(editors[i].getEmail()); }
  Logger.log(Session.getActiveUser().getEmail());
  theFile.removeEditor(Session.getActiveUser().getEmail());
}

请尝试使用.getEffectiveUser()代替.getActiveUser(),因为这通常也会导致意外结果。

答案 1 :(得分:0)

这被视为评论,只是比常规评论更多。

在另一个答案中建议的代码似乎存在问题:您不能将自己删除为编辑器(当您将所有权设置为其他用户时,您将自动成为编辑器)已复制文件的所有者...您将收到相同的错误消息。

你给出的第一个创建文件的代码片段应遵循相同的逻辑,但是 - 正如我今天所了解的那样(感谢) - 它没有,我真的不知道为什么。

(我希望有人"更好地了解情况"会解释......)

我想唯一的解决方案(至少我可以想象使用脚本)如果你不想成为副本的编辑器,那就是在你的模板中集成一个小脚本(将被复制到副本)创建一个菜单,允许新用户调用一个将您作为编辑器删除的功能。

或者更简单地说,从Drive Ui本身解释如何做到这一点; - )