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.

¿Puede un formulario de Google extraer datos de una hoja de cálculo de Google cada vez que un encuestado lo abra?

Hola y gracias por leer. Estoy tratando de crear un sistema donde los encargados puedan ingresar los nombres de los participantes en un formulario. En otro formulario, para ingresar las puntuaciones de una competencia, los encargados pueden seleccionar el nombre en un menú desplegable. No soy programador, pero llegué bastante lejos buscando en Google y “robando” código. Lo que tengo ahora es un código en el primer formulario (para agregar nombres). Cuando lo envías, el formulario agrega el nombre a una hoja de Google. Luego, el código agrega los nombres en la hoja de Google al formulario para ingresar las puntuaciones. ¡Hasta aquí todo bien!

Pero ahora el problema: hay más de una competencia. Lo que podría hacer es cambiar el código para que también agregue los nombres en la hoja de Google al formulario de la otra competencia, pero eso es mucho trabajo cada vez que hay una nueva competencia. Sería más fácil tener un código en el formulario de la competencia en sí que le diga al formulario: cada vez que alguien te abre (como un encargado que responde, no un editor), ejecuta este código. ¿Es eso posible? Ahora uso el desencadenador “al enviar” para el otro formulario, pero en realidad necesito un desencadenador “al ingresar” o algo así. Intenté con “al abrir” pero eso solo funciona cuando el editor abre el formulario.

Aquí está el código que tengo en el formulario “agregar nombre” (el desencadenador se encuentra en otro lugar)

function addRider(){
  // llama al formulario y conecta el elemento desplegable
  var form = FormApp.openById("1NeKicU9d3yqQX1D2ZliE-t87k3OVW8lqn9avhNs54NM");

  var riderList = form.getItemById("10469776").asListItem();

  // identifica la hoja donde se encuentra los datos necesarios para poblar el menú desplegable
  var rider = SpreadsheetApp.openById("1kLBqtU4ebR3tElrEIZNklmxr0hu5IwE6_UV7AN9T1wE").getSheetByName("Riders");

  // toma los valores de la primera columna de la hoja - usa 2 para omitir la fila de encabezado
  var riderValues = rider.getRange(2, 3, rider.getMaxRows() - 1).getValues();

  var riderNames = [];

  // convierte el array en ignorar las celdas vacías
  for(var i = 0; i < riderValues.length; i++)   
    if(riderValues[i][0] != "")
      riderNames[i] = riderValues[i][0];

  // pupula el menú desplegable con los datos del array
  riderList.setChoiceValues(riderNames);
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible tener un código en el formulario de competición en sí que se ejecute cada vez que alguien lo abre (como un respondedor). Puedes utilizar el activador “al enviar el formulario” para activar una función que agregue los nombres en el formulario a la hoja de cálculo de Google correspondiente a la competición.

    Aquí tienes un ejemplo de código que puedes utilizar:

    function onFormSubmit(e) {
      // obtener la respuesta del formulario
      var response = e.response.getItemResponses();
      // obtener el nombre ingresado en el formulario
      var name = response[0].getResponse();
    
      // identificar la hoja donde se encuentra los datos de la competición
      var sheet = SpreadsheetApp.openById("ID de tu hoja de cálculo").getSheetByName("nombre de la competición");
    
      // agregar el nombre a la hoja
      sheet.appendRow([name]);
    
      // llamar a tu formulario y conectarse al elemento de la lista desplegable
      var form = FormApp.openById("ID de tu formulario");
      var dropdown = form.getItemById("ID de tu lista desplegable").asListItem();
    
      // obtener los nombres de la hoja
      var data = sheet.getDataRange().getValues();
      var names = [];
      for (var i = 1; i < data.length; i++) { // comenzar en 1 para omitir la fila de encabezado
        names.push(data[i][0]);
      }
    
      // llenar la lista desplegable con los nombres
      dropdown.setChoiceValues(names);
    }
    

    Este código se ejecutará cada vez que alguien envíe el formulario y agregará su nombre a la hoja de cálculo de Google correspondiente. También actualizará el menú desplegable en el formulario de entrada de puntuación con los nombres de la hoja, para que los respondedores puedan seleccionar un nombre de la lista desplegable.

Comments are closed.