Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
Copy google drive Folder

I am trying to alter some code I found on this website to be a bit more custom to my project and a bit more user-friendly for my co-workers.

I am trying to pull in the folder ID's for the source and target folders from cells in the spreadsheet. I'm positive I did the code correctly for this part but I get an ID exception error when trying to run the code. When I directly place the ID's into the code, using quotations to make them strings, where I currently have resSource and resTarget, the code works perfectly.

I can't figure out how to use a variable to pass the folder ID's into the function correctly...can anyone help?

function onOpen(){
 createMenu()
}
function createMenu (){
 const ui = SpreadsheetApp.getUi() 
 const menu = ui.createMenu("Copy Folders")
menu.addItem("Copy Folder", "copyFolder")
menu.addToUi()
}

/**
 * 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(resSource)
  const copyInto = DriveApp.getFolderById(resTarget)

  var app = SpreadsheetApp;
   var ss = app.getActiveSpreadsheet();
   var activeSheet = ss.getActiveSheet();
   var sourceText = activeSheet.getRange("A2").getValue();
  var resSource = sourceText.toString;
   console.log(resSource);
   var targetText = activeSheet.getRange("B2").getValue();
   var resTarget = targetText.toString;
   console.log(resTarget);

  // Call the function that copies the folder
  copyFolder_(toCopy, copyInto)
}
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

function copyFolderContents_(source, target) {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("SheetName");
  const vs = sh.getRange(2, 1, sh.getLastRow() - 1, 2).getValues();
  vs.forEach(r => {
    let source = DriveApp.getFolderById(r[0]);
    let target = DriveApp.getFolderById(r[1]);
    const files = source.getFiles()
    while (files.hasNext()) {
      const file = files.next()
      file.makeCopy(file.getName(), target)
    }
  });
}
A B
Source Id's Target Id's
about 4 years ago · Juan Pablo Isaza Denunciar

0

On the copyFolder function the code is passing resSource and resTarget as parameters on a couple of statements but these variables are declared after them.

Try moving

// Get the folders (by ID in this case)
const toCopy = DriveApp.getFolderById(resSource)
const copyInto = DriveApp.getFolderById(resTarget)

just before

// Call the function that copies the folder
copyFolder_(toCopy, copyInto)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda