es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mueva la carpeta de Google Drive con todos los archivos/carpetas en su interior de un directorio a otro según el valor de la hoja de cálculo de Google.

Quiero que las carpetas con todos los archivos o subcarpetas dentro de ellas se muevan de un directorio/carpeta a otro según el valor en la hoja de cálculo de Google, pero al mismo tiempo no cambien el ID de la carpeta porque la carpeta se comparte con otros miembros del equipo, por lo tanto, no quiero interferir con el acceso. He buscado en todas partes de la red. Lo que encontré fue un script que crea una copia de la carpeta (que definitivamente cambia el ID) y elimina la carpeta antigua, lo cual definitivamente puede cambiar el estado de acceso.
La URL de la carpeta está en la hoja que debe moverse a través de los directorios. Aquí está el código que puede ayudar a entenderlo mejor.

function onEdit(e) { 
 const inactive_folder = DriveApp.getFileById('1_hBkktH0Alzx06XS0Hu2tI0MSQ_SffKw');
 const active_folder = DriveApp.getFolderById('13uon5guBduiA0gCKiLjl9ElOgek9CiU6');

 if (e.range.columnStart != 1 || e.value != "Inactive"){
  const rData = e.source.getActiveSheet().getRange(e.range.rowStart,1,1,13).getValues();
  // Url of the client folder in 11th column 
  let client_folder = rData[0][11];

  DriveApp.getFileById(client_folder).moveTo(inactive_folder);
 } else {
  DriveApp.getFileById(client_folder).moveTo(active_folder);
 }
}

Cualquier ayuda será muy apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en google-apps-script, google-sheets, shared-directory y flysystem-google-drive, sugiero la siguiente solución:

    Para mover las carpetas con todos los archivos o subcarpetas que contienen de un directorio/carpeta a otro basándose en el valor de una hoja de cálculo de Google, sin cambiar el ID de la carpeta, puedes utilizar el siguiente código:

    function moveFolders() {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getSheetByName("Sheet1"); // modifica con el nombre de tu hoja
      const folderUrlColumn = 11; // modifica con el número de columna donde se encuentra la URL de la carpeta
      const inactiveFolderId = "1_hBkktH0Alzx06XS0Hu2tI0MSQ_SffKw"; // modifica con el ID de la carpeta inactiva
      const activeFolderId = "13uon5guBduiA0gCKiLjl9ElOgek9CiU6"; // modifica con el ID de la carpeta activa
      const foldersToMove = sheet.getDataRange().getValues().slice(1).filter(row => row[0] == "Inactive");
    
      foldersToMove.forEach(row => {
        const folderUrl = row[folderUrlColumn - 1];
        const folder = DriveApp.getFolderById(getFolderIdFromUrl(folderUrl));
        const targetFolderId = row[0] == "Inactive" ? inactiveFolderId : activeFolderId;
        const targetFolder = DriveApp.getFolderById(targetFolderId);
        folder.moveTo(targetFolder);
      });
    }
    
    function getFolderIdFromUrl(url) {
      const regex = /\/folders\/(.+)/;
      const match = url.match(regex);
      if (match) {
        return match[1];
      } else {
        throw new Error("URL de carpeta no válida");
      }
    }
    

    Este código define una función moveFolders que lee los valores de una hoja de cálculo de Google, filtra las filas basándose en el valor de la primera columna y mueve las carpetas a la carpeta objetivo (ya sea la carpeta inactiva o activa) sin cambiar sus IDs.

    La función getFolderIdFromUrl es una función auxiliar que extrae el ID de la carpeta de una URL de carpeta.

    Puedes personalizar este código modificando el nombre de la hoja, el número de columna donde se encuentran las URLs de las carpetas y los IDs de las carpetas inactiva y activa.

Comments are closed.