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

Google Apps Script - Impossible operation with an element inside a shared drive

我有件事需要你的帮助。

我做了一个功能,其目标是复制模板文件并将其放入共享驱动器的文件夹中。问题是程序 returns :

"Exception: This operation cannot be performed on an item in a shared 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);
};

问题是您正试图删除与 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); 足以重命名文件 - 你不需要删除旧名称的文件并插入新名称的文件。

更新

如果您的目标是将文件复制到团队云端硬盘文件夹,您可以使用云端硬盘 API:

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