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.

Asigna a cada pregunta en un formulario de Google un identificador único.

Quiero crear un formulario de Google utilizando Google Apps Scripts. Las preguntas en el formulario provienen de una Hoja de Google que incluye el ID y el texto de una pregunta. Cuando se envía el formulario y exporto las preguntas a una hoja, los nombres de columna son las preguntas como texto. Preferiría reemplazarlos utilizando un ID único basado en una columna de mi propia Hoja de Google donde las preguntas también se almacenan como texto.

¿Cómo puedo resolver esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes utilizar el Google Apps Script para crear un array de preguntas con IDs únicos basados en la columna ID de tu hoja de cálculo de Google. Luego, utiliza este array como base para crear tu formulario de Google. Cuando se envíen las respuestas, utiliza otro script para recuperar las respuestas y reemplazar los nombres de las columnas con los IDs correspondientes de tu hoja de cálculo de Google.

    Aquí están los pasos que puedes seguir:

    1. Abre tu hoja de cálculo de Google y crea una columna para el ID único de cada pregunta. Asigna IDs únicos para cada pregunta en esta columna.
    2. Crea una segunda columna para el texto de las preguntas.

    3. Abre el editor de scripts para tu hoja de cálculo de Google haciendo clic en “Herramientas” -> “Editor de scripts”.

    4. En el editor de scripts, crea una función para recuperar las preguntas de tu hoja de cálculo de Google y crear un array con IDs únicos basados en la columna ID:

    function getQuestions() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Preguntas");
      var data = sheet.getDataRange().getValues();
      var questions = [];
    
      for (var i = 1; i < data.length; i++) {
        var row = data[i];
        var question = {
          id: row[0],
          text: row[1],
        };
        questions.push(question);
      }
    
      return questions;
    }
    
    1. Guarda la función y ejecútala haciendo clic en “Ejecutar” -> “getQuestions”. Verifica los registros para asegurarte de que esté devolviendo un array con las preguntas y los IDs.

    2. Crea un nuevo formulario de Google y agrega las preguntas utilizando los IDs y el texto del array. Por ejemplo:

    function createForm() {
      var form = FormApp.create('Mi Formulario');
    
      var questions = getQuestions();
    
      for (var i = 0; i < questions.length; i++) {
        var question = questions[i];
        form.addMultipleChoiceItem()
          .setTitle(question.text)
          .setChoices([
            form.createChoice('Sí', 'si'),
            form.createChoice('No', 'no'),
          ])
          .setPoints(1)
          .setRequired(true)
          .setTags([question.id]);
      }
    }
    

    Ten en cuenta que estamos utilizando el método “setTags” para asociar cada pregunta con su ID único.

    1. Guarda la función y ejecútala haciendo clic en “Ejecutar” -> “createForm”. Verifica tu panel de formularios de Google para asegurarte de que el formulario se haya creado correctamente.
  2. Cuando se envíe el formulario, puedes recuperar las respuestas y reemplazar los nombres de las columnas con los IDs correspondientes de tu hoja de cálculo de Google utilizando otro script. Aquí tienes un ejemplo:

  3. function processResponses() {
      var responses = FormApp.openById('tu-ID-de-formulario').getResponses();
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Respuestas");
      var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
      var questions = getQuestions();
    
      for (var i = 0; i < responses.length; i++) {
        var response = responses[i];
        var itemResponses = response.getItemResponses();
        var row = [];
    
        for (var j = 0; j < itemResponses.length; j++) {
          var itemResponse = itemResponses[j];
          var questionId = itemResponse.getItem().getTitle();
          var question = questions.find(function(q) { return q.text === questionId; });
          var index = headers.indexOf(questionId);
          row[index] = itemResponse.getResponse();
          sheet.getRange(i + 2, index + 1).setValue(itemResponse.getResponse());
        }
    
        sheet.appendRow(row);
      }
    }
    

    Ten en cuenta que estamos utilizando el método “find” para buscar el ID de la pregunta basado en su texto, y luego utilizando el método “indexOf” para encontrar el índice de columna correspondiente en la hoja de cálculo. Luego, reemplazamos los nombres de las columnas con los IDs y establecemos los valores en la hoja de cálculo.

    1. Guarda la función y ejecútala haciendo clic en “Ejecutar” -> “processResponses”. Verifica tu hoja de cálculo de Google para asegurarte de que las respuestas se hayan procesado correctamente.

    Con estos pasos, deberías poder crear un formulario de Google basado en una hoja de cálculo de Google con IDs únicos para cada pregunta, y reemplazar los nombres de las columnas con los IDs correspondientes cuando se envíen las respuestas.

Comments are closed.