it-swarm.com.ru

Перемещение файлов на Google Диске с использованием Google Script

Я пытаюсь создать документы, используя информацию, размещенную в формах Google, а затем, когда документ будет создан, я хочу переместить документ в общую папку для просмотра.

На данный момент у меня есть скрипт, который берет всю информацию из связанной таблицы Google Forms. 

Используя эту информацию, я использую следующий код для создания документа:

  var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
  var newDoc = DocumentApp.create(requestID + " - " + requestSummary);

Это создает документ успешно в моей корневой папке Google Drive, но я не могу переместить его туда, куда я хочу переместить. 

Я видел много постов, предлагающих использовать такие вещи, как targetFolder.addFile (newDoc), но это не работает, аналогично я видел примеры вроде newDoc.addToFolder (targetFolder), но опять же, это не работает для меня.

Кажется, что все онлайн-вопросы, которые люди уже задавали по этому поводу, используют предыдущие версии API, которые больше не применяются, и эти методы не применяются к новой функциональности DriveApp. 

Я хотел бы, если возможно, создать новый документ, как указано выше, чтобы я мог редактировать содержимое с помощью сценария, а затем иметь возможность перемещать этот файл в общую папку. (Из того, что я понимаю, в настоящее время нет функции перемещения, поэтому достаточно сделать копию и удалить старую).

5
S Woodhouse

Если мы сделаем копию файла и удалим оригинал, это приведет к изменению URL-адреса файла, а также настройки общего доступа к файлам не будут сохранены.

В Drive можно добавить файл в несколько папок с помощью метода .addFolder () службы DriveApp. Вы можете добавить файл в целевую папку, а затем удалить файл из непосредственной родительской папки.

function moveFiles(sourceFileId, targetFolderId) {
  var file = DriveApp.getFileById(sourceFileId);
  file.getParents().next().removeFile(file);
  DriveApp.getFolderById(targetFolderId).addFile(file);
}
13
Amit Agarwal

Это мой первый пост! Я знаю, что на этот вопрос уже отвечали несколько раз, но на самом деле я столкнулся с этим вопросом, работая над своим проектом, и, просматривая документацию Apps Script, я нашел краткий способ сделать это. Вариант ответа some1.

var file = DriveApp.getFileById(fileid);
DriveApp.getFolderById(folderid).addFile(file);
DriveApp.getRootFolder().removeFile(file);

Надеюсь, поможет!

7
Aaron McKeehan

Прямой метод в File или Folder Classes не позволяет перемещать файлы из одной папки на Google Диске в другую. Как вы упомянули, вы можете скопировать файл в другую папку с помощью метода makeCopy () , а затем удалить его с помощью setTrashed () , код должен выглядеть следующим образом:

  var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
  var newDoc = DocumentApp.create(requestID + " - " + requestSummary); // Creates the Document in the user's Drive root folder

  // Modify the new document here, example:
  // var body = newDoc.getBody();
  // body.appendParagraph("A paragraph.");
  // newDoc.saveAndClose();

  var driveFile = DriveApp.getFileById(newDoc.getId()); // Gets the drive File

  driveFile.makeCopy(newDoc.getName(), targetFolder); // Create a copy of the newDoc in the shared folder
  driveFile.setTrashed(true);  //  sets the file in the trash of the user's Drive

Правка:

Вторую мысль и с учетом комментариев Рубена. Я согласен, что лучше реализовать ответ Амита.

2
ocordova

Попробуй это:

var file = DriveApp.getFileById(newDoc.getId());
targetFolder.addFile(file);
//DriveApp.getFolderById('root').removeFile(file); // remove from root
0
some1

На этот вопрос ответили, но здесь немного другая конфигурация:

function moveFile(parameterObject) {
  var currentFolderID,file,fileToMoveID,sourceFolder,targetFolder,targetFolderID;

  fileToMoveID = parameterObject.fileToMoveID;
  currentFolderID = parameterObject.currentFolderID;
  targetFolderID = parameterObject.targetFolderID;

  file = DriveApp.getFileById(fileToMoveID);//Get the file to move

  if (!file) {
    functionToHandleThisKindOfThing("there is no file");
    return;
  }

  if (currentFolderID) {//The folder ID holding the current file was passed in
    sourceFolder = DriveApp.getFolderById(currentFolderID);
  } else {//No ID for the current folder
    sourceFolder = file.getParents();
    if (sourceFolder) {
      if (sourceFolder.hasNext()) {
        sourceFolder = sourceFolder.next();
      }
    }
  }

  targetFolder = DriveApp.getFolderById(targetFolderID);

  targetFolder.addFile(file);
  sourceFolder.removeFile(file);
}

function testCode() {
  var o;

  o = {
    'fileToMoveID':"File ID of file to Move",
    "targetFolderID":"ID of folder to Move to"
  }

  moveFile(o);

}
0
Sandy Good