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.

Cargue archivos de formulario de Google en dos carpetas diferentes de Google Drive.

Tengo un formulario de Google que tiene dos secciones para subir archivos. Quiero poder subir esos archivos a dos carpetas diferentes. Los archivos en la primera sección de carga de archivos deben ir en la Carpeta 1 y los archivos en la segunda sección de carga de archivos deben ir en la Carpeta 2. También quiero nombrar automáticamente las carpetas en función del nombre de los remitentes. Las carpetas deben ir como sigue: sendername1, sendername2, etc., si los remitentes tienen el mismo nombre. ¿Cómo puedo hacer esto? Encontré el siguiente script pero parece funcionar solo con la carpeta 1. La Carpeta 2 tiene los archivos de la segunda sección de carga de archivos pero no crea automáticamente una carpeta para ellos.

    function onFormSubmit(e) {


    const folderId = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u";  // Por favor, establezca el ID de la carpeta superior de las carpetas de destino.

  const form = FormApp.getActiveForm();
  const formResponses = form.getResponses();
  const itemResponses = formResponses[formResponses.length-1].getItemResponses();

  Utilities.sleep(3000); // Esta línea podría no ser necesaria.

  // Preparar la carpeta.
  const destFolder = DriveApp.getFolderById(folderId);
  const folderName = itemResponses[0].getResponse();
  const subFolder = destFolder.getFoldersByName(folderName);
  const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);

  // Mover archivos a la carpeta.
itemResponses[2].getResponse().forEach(id => DriveApp.getFileById(id).moveTo(folder));

}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, deberás modificar el script proporcionado para manejar múltiples secciones de subida de archivos y crear una nueva carpeta para cada conjunto de archivos cargados. Aquí está un script actualizado que debería lograr esto:

    function onFormSubmit(e) {
      const topFolderId = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u"; // Por favor, establece el ID de la carpeta principal de las carpetas de destino.
    
      const form = FormApp.getActiveForm();
      const formResponses = form.getResponses();
      const itemResponses = formResponses[formResponses.length-1].getItemResponses();
    
      Utilities.sleep(3000); // Es posible que esta línea no sea necesaria.
    
      // Prepara la carpeta de destino de nivel superior.
      const topFolder = DriveApp.getFolderById(topFolderId);
    
      // Determina el nombre del remitente.
      let senderName = itemResponses[itemResponses.length - 1].getResponse(); // suponga que el último elemento en las respuestas es el nombre del remitente
    
      // Encuentra o crea la subcarpeta adecuada para cargar archivos.
      let subFolderNumber = 1;
      let subFolderName = senderName + "_" + subFolderNumber;
      while (topFolder.getFoldersByName(subFolderName).hasNext()) {
        subFolderNumber++;
        subFolderName = senderName + "_" + subFolderNumber;
      }
      const subFolder = topFolder.createFolder(subFolderName);
    
      // Mueve los archivos de ambas secciones de carga de archivos a la subcarpeta.
      let fileIds = itemResponses[0].getResponse().concat(itemResponses[1].getResponse());
      fileIds.forEach(id => DriveApp.getFileById(id).moveTo(subFolder));
    }
    

    Este script debería manejar dos secciones de carga de archivos y crear una nueva subcarpeta para cada conjunto de archivos cargados. Determina el nombre del remitente a partir de la respuesta del formulario y utiliza esto para crear un nombre de subcarpeta único. Un bucle while comprueba si ya existe una subcarpeta con ese nombre e incrementa el número en el nombre si es necesario. Finalmente, mueve todos los archivos cargados a la subcarpeta correspondiente.

    Tenga en cuenta que este script asume que el nombre del remitente es el último elemento en la matriz de respuestas del formulario. Es posible que deba modificar esto si su formulario tiene un diseño diferente.

Comments are closed.