Google Apps Script - невозможная операция с элементом внутри общего диска - PullRequest
2 голосов
/ 23 апреля 2020

Мне нужна ваша помощь по чему-то.

Я выполнил функцию, цель которой - сделать копию файла шаблона и поместить его в папку на общем диске. Проблема в том, что программа возвращает:

«Исключение: эту операцию невозможно выполнить с элементом на общем диске»

Тем не менее, у меня есть все разрешения в этот общий диск, поэтому я не понимаю.

Я сделал несколько твиков и обнаружил, что removeFile и addFile являются частями проблемы. Если я не запускаю их, папка создается и копия создается. Но мне все еще нужно переместить файл.

Я надеюсь, что кто-то может помочь мне с этим.

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 Ответ

1 голос
/ 23 апреля 2020

Проблема в том, что вы пытаетесь удалить файл на общем диске с помощью 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})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...