Pregunta

Estoy intentando (y no lo logro en este momento) completar un formulario de Google desde una hoja de cálculo de Google usando los elementos que recogí de este sitio web y esta respuesta extremadamente útil proporcionada por Mogsdad. aquí.

Lo ideal es que esté buscando:

  1. Logger.log (URL) registra las URL de todos los datos almacenados en la hoja de cálculo. ¿Es posible registrar simplemente la última entrada y usarla para generar la URL?

  2. ¿Es entonces posible que la URL precargada se envíe automáticamente una vez completada con los datos?He encontrado este artículo útil. aquí ¿Qué sugiere que esto se puede hacer?

  3. Los datos que se almacenan en la hoja de cálculo de Google son datos capturados de otro formulario de Google.Esto se debe a la necesidad de utilizar Excel (falta de conectividad a Internet) con una fórmula de concatenación para fusionar todas las celdas con datos en una sola.Luego se envía en el otro formulario de Google que tiene este script para dividir los datos por columna listo para responder las preguntas.¿Esto afectará el activador necesario para el envío automático cuando se realiza un envío?

¿Puedo agregar que tengo un conocimiento bastante limitado sobre esto, así que, por favor, vaya con calma si esto parece bastante fácil de hacer?

¿Fue útil?

Solución

¿Es posible simplemente registrar la última entrada y usarla para generar la URL?

No estoy seguro de seguirte aquí; en esa otra respuesta, el Logger.log() La declaración era solo para demostrar que podía generar la URL correcta, si deseaba distribuirla.En lugar de registrarlo, simplemente usarías el contenido de la variable. url.

Pero sigamos adelante, porque creo que esto se sale un poco de tu camino.

¿Es entonces posible que la URL precargada se envíe automáticamente una vez completada con los datos?

Hay un mejor punto de partida. ¿Podemos enviar información mediante programación desde una hoja de cálculo a un formulario de Google? ¡Seguro!Ver Utilice App Scripts para abrir el formulario y hacer una selección.Es una forma más confiable de hacer el trabajo que la que ves en la publicación "Trucos de URL".

En el caso del "envío automático" o de simular el envío de un formulario, no necesita preocuparse en absoluto por la URL precompletada.Ese es un atajo para humanos molestos.Lo que quieres es armar el payload para POST solicite, en su lugar, y haga que una computadora omita la interfaz de usuario del formulario por completo.

Algo sobre Excel...¿Esto afectará el activador necesario para el envío automático cuando se realiza un envío?

(Suena como...) Está utilizando Form1 para obtener datos en la Hoja de cálculo1 y luego espera reaccionar al envío (¿humano?) de Form1 haciendo que la máquina envíe Form2 después de separar los datos de Form1.

Sí, deberá tener cuidado de que la división de columnas se realice antes de intentar leer la información para enviar Form2.

Le sugiero que lo mejor sería contar con una función desencadenante de envío de formulario para la Hoja de cálculo1 que divida la cadena recibida de Form1 y luego envíe inmediatamente el POST a Form2.Luego registraría el hecho de que esta acción ha ocurrido, usando la técnica de Activador de correo electrónico de hoja de cálculo.

Otros consejos

  1. ¿Es posible que la URL pre-llenada se envíe automáticamente una vez poblada con los datos? He encontrado este artículo útil aquí que sugiere que esto se puede hacer?

como Mogsdad dijo

Hay un mejor punto de partida. ¿Podemos presentar programáticamente información de una hoja de cálculo a un formulario de Google? ¡Seguro!

De acuerdo con una edición a > Use scripts de aplicaciones para abrir el formulario y hacer una selección , el método de carga útil / postal ahora está obsoleto. La alternativa es usar el servicio de aplicaciones de formulario. A continuación se muestra una adaptación que realicé a InclineTterbuilurls 1 por mogsdad Para enviar respuestas en lugar de crear URL rellenadas previas y para ser utilizado en un archivo de proyecto de script de Google independiente.

Se comentan las líneas de código originales que se cambiaron. También inserté algunas líneas de ruptura para evitar la barra de desplazamiento horizontal.

/**
 * Use Form API to populate form
 * 
 * Addapted from https://stackoverflow.com/a/26395487/1677912
 */
function populateFormResponses() {
  //var ss = SpreadsheetApp.getActive();
  var id = '11KDxp1C6jAZaTMNlGHke8zEzQ7aZrFSFGABdwUHEV80';
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("Form Responses 1");
  var data = ss.getDataRange().getValues();  // Data for pre-fill
  var headers = data[0];                     // Sheet headers == form titles (questions)

  var formUrl = ss.getFormUrl();             // Use form attached to sheet
  var form = FormApp.openByUrl(formUrl);
  var items = form.getItems();
  //var urlCol = headers.indexOf("Prefilled URL");   // If there is a column labeled this
                                                     // way, we'll update it

  // Skip headers, then build URLs for each row in Sheet1.
  for (var row = 1; row < data.length; row++ ) {
    //Logger.log("Generating pre-filled URL from spreadsheet for row="+row);
    Logger.log("Generating response from spreadsheet for row="+row);
    // build a response from spreadsheet info.
    var response = form.createResponse();
    for (var i=0; i<items.length; i++) {
      var ques = items[i].getTitle();           // Get text of question for item
      var quesCol = headers.indexOf(ques);      // Get col index that contains this 
                                                // question
      var resp = ques ? data[row][quesCol] : "";
      var type = items[i].getType().toString();
      Logger.log("Question='"+ques+"', resp='"+resp+"' type:"+type);
      // Need to treat every type of answer as its specific type.
      switch (items[i].getType()) {
        case FormApp.ItemType.TEXT:
          var item = items[i].asTextItem();
          break;
        case FormApp.ItemType.PARAGRAPH_TEXT: 
          item = items[i].asParagraphTextItem();
          break;
        case FormApp.ItemType.LIST:
          item = items[i].asListItem();
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item = items[i].asMultipleChoiceItem();
          break;
        case FormApp.ItemType.CHECKBOX:
          item = items[i].asCheckboxItem();
          // In a form submission event, resp is an array, containing CSV strings. Join 
          // into 1 string.
          // In spreadsheet, just CSV string. Convert to array of separate choices, ready 
          // for createResponse().
          if (typeof resp !== 'string')
            resp = resp.join(',');      // Convert array to CSV
          resp = resp.split(/ *, */);   // Convert CSV to array
          break;
        case FormApp.ItemType.DATE:
          item = items[i].asDateItem();
          resp = new Date( resp );
          break;
        case FormApp.ItemType.DATETIME:
          item = items[i].asDateTimeItem();
          resp = new Date( resp );
          break;
        default:
          item = null;  // Not handling DURATION, GRID, IMAGE, PAGE_BREAK, SCALE, 
                        // SECTION_HEADER, TIME
          break;
      }
      // Add this answer to our pre-filled URL
      if (item) {
        var respItem = item.createResponse(resp);
        response.withItemResponse(respItem);
      }
      // else if we have any other type of response, we'll skip it
      else Logger.log("Skipping i="+i+", question="+ques+" type:"+type);
    }

    // Submit response
    response.submit();

    // Generate the pre-filled URL for this row
    //var editResponseUrl = response.toPrefilledUrl();

    // If there is a "Prefilled URL" column, update it
    //if (urlCol >= 0) {
    //  var urlRange = sheet.getRange(row+1,urlCol+1).setValue(editResponseUrl);
    //}
  }
};

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top