谷歌应用脚本 - 在共享驱动器内对元素进行不可能的操作。

问题描述 投票:2回答:1

我需要你的帮助。

我做了一个函数,目标是复制一个模板文件,并把它放在一个共享驱动器的文件夹中。问题是,该程序返回:

"Exception.This operation cannot be performed on an item in the share 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);
};
google-apps-script google-drive-api google-drive-team-drive
1个回答
1
投票

问题是,你正在试图删除一个共享驱动器上的文件与 DriveApp

如果你改用 高级驱动器服务 其中你可以指定 "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})
}
© www.soinside.com 2019 - 2024. All rights reserved.