Google Apps脚本-共享驱动器中的元素无法操作

时间:2020-04-23 13:30:34

标签: google-apps-script google-drive-api google-drive-team-drive

我需要您的帮助。

我做了一个功能,目标是制作一个模板文件的副本,并将其放在共享驱动器的文件夹中。问题是程序返回:

“例外:无法对共享驱动器中的项目执行此操作”

但是,我拥有该共享驱动器中的所有权限,所以我不理解。

我做了几处调整,发现removeFileaddFile是问题的一部分。如果我不运行它们,则会创建文件夹并进行复制。但是我仍然需要移动文件。

我希望有人可以帮助我。

PS:您可以在下面查找我的代码。

function makeCopyFile(folderID, fileID, newName) {
  var getFolder = DriveApp.getFolderById(folderID);
  var file = DriveApp.getFileById(fileID);
  var copyFile = file.makeCopy();
  var newFile = copyFile.setName(newName);
  
  // Remove the file from all parent folders
  var parents = newFile.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    parent.removeFile(newFile);
  }
  getFolder.addFile(newFile);
};

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试使用DriveApp

删除共享驱动器上的文件

如果您使用Advanced Drive service代替"supportsAllDrives": true

,它将起作用。

因此,在启用高级服务后:替换

  var parents = newFile.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    parent.removeFile(newFile);
  }

通过

  var id = copyFile.getId();
  // or alternatively  `var id = newFile.getId();` - because it is the same
  Drive.Files.remove(id,{"supportsAllDrives": true})

getFolder.addFile(newFile);

一旦删除文件,便无法再将其添加回去。另外,我不了解您这样做的动机-copyFile.setName(newName);足以重命名该文件-您无需删除具有旧名称的文件并插入具有新名称的文件。

更新

如果您的目标是将文件复制到团队驱动器文件夹,则可以使用Drive API轻松完成以下操作:

function  makeCopyFile(folderID, fileID, newName){
  var resource = {
  "parents": [
    {
      "id": folderID
    }
  ],
  "title": newName
}
  Drive.Files.copy(resource, fileID, {"supportsAllDrives": true})
}