首页 > 解决方案 > 如何从 Google Drive 复制文件夹以使用 JS 在 Google Drive 中创建新文件夹

问题描述

我想将文件夹复制到 Google Drive 中的主文件夹中。我的主要问题是当一列不为空白而另一列为空白时创建一个函数。一旦创建了一个新文件夹,它必须将文件夹 URL 粘贴到其中一列中。

这是我到目前为止所拥有的:

function addData(){
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var lr = activeSheet.getLastRow();
  var lc = activeSheet.getLastColumn();
  var sourceData = sourceSheet.getRange(1, 1, lr, lc).getValues();
  for (row in sourceData) {
    if (sourceData[row][0] !== "" && sourceData[row][19] !== "") {
      var rowNum = parseInt(row);

     //code will go here for Folder copying and renaming and getting the new folder url

     activeSheet.getRange(rowNum+1,lc).setValue("Completed"); //we will eventually change Completed with the new Folder URL
  }
 }
}

标签: javascriptgoogle-apps-scriptdirectory-structuregoogle-drive-shared-drive

解决方案


主要思想是使用Folder.getFiles()和文件夹迭代文件Folder.getFolders()。使用以下命令创建新文件夹Folder.createFolder(name)并复制文件File.makeCopy(name, destination)

/**
 * Copies all the files in a folder to another one.
 */
function copyFolderContents_(source, target) {
  // Iterate files in source folder
  const filesIterator = source.getFiles()
  while (filesIterator.hasNext()) {
    const file = filesIterator.next()

    // Make a copy of the file keeping the same name
    file.makeCopy(file.getName(), target)
  }
}

/**
 * Recursivelly copies a folder and all its subfolders with all the files
 */
function copyFolder_(toCopy, copyInto) {
  // Makes the new folder (with the same name) into the `copyInto`
  const newFolder = copyInto.createFolder(toCopy.getName())

  // Copy the contents
  copyFolderContents_(toCopy, newFolder)

  // Iterate any subfolder
  const foldersIterator = toCopy.getFolders()
  while (foldersIterator.hasNext()) {
    const folder = foldersIterator.next()

    // Copy the folder and it's contents (recursive call)
    copyFolder_(folder, newFolder)
  }
}

/**
 * Entry point to execute with the Google Apps Script UI
 */
function copyFolder() {
  // Get the folders (by ID in this case)
  const toCopy = DriveApp.getFolderById('')
  const copyInto = DriveApp.getFolderById('')

  // Call the function that copies the folder
  copyFolder_(toCopy, copyInto)
}

您需要添加要复制的文件夹的 id 和要从中复制它的文件夹copyFolder()

foldersIterator并且filesIterator是 Google Apps 脚本迭代器。hasNext()如果有另一个项目,他们有一个返回的方法,以及一个next()检索它的方法。

请注意,它copyFolder_(toCopy, copyInto)使用自身来复制其子文件夹。

参考


推荐阅读