Est-il possible de "pré-remplir" un formulaire google en utilisant les données d'une feuille de calcul google?

je cherche un moyen de "pré-remplir" un formulaire google avec des données spécifiques d'une feuille de calcul google. Le formulaire comportera les mêmes questions "standard" pour tout le monde, mais les données des deux premières questions seront "pré-remplies" avec des données uniques provenant d'une feuille de calcul google existante. Les données seront uniques en fonction de leur adresse courriel dans la feuille de calcul existante.

EXEMPLE DE FEUILLE DE CALCUL SOURCE

Col 1       Col 2        Col 3 
email       name         birthday  
@mike       Mike Jones   May 9th 1975  
@jim        Jim Smith    April 19th 1985

PREMIER EXEMPLE DE FORMULAIRE

Question 1-remplie au préalable avec les données (Mike Jones) d'une feuille de calcul google.

Question 2-remplie au préalable avec les données (9 mai 1975) à partir d'une feuille de calcul google.

Question 3-blanc (en attente de réponse de l'utilisateur)

Question 4-blanc (en attente de réponse de l'utilisateur)


DEUXIÈME EXEMPLE DE FORMULAIRE

Question 1-remplie au préalable avec les données (Jim Smith) à partir d'une feuille de calcul google.

Question 2-remplie au préalable avec les données (19 avril 1985) à partir d'une feuille de calcul google.

Question 3-blanc (en attente de réponse de l'utilisateur)

Question 4-blanc (en attente de réponse de l'utilisateur)


est-ce que quelqu'un sait si cela peut être fait? Si oui, toute aide ou direction sera grandement appréciée.

Merci d'avance!

Todd

58
demandé sur Rubén 2013-11-21 02:32:57

1 réponses

vous pouvez créer une URL de formulaire pré-remplie à partir de L'éditeur de formulaires, tel que décrit dans la documentation pour les formulaires D'entraînement . Vous finirez avec une URL comme celle-ci, par exemple:

https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899

buildUrls ()

dans cet exemple, la question 1," Nom", A UNE ID de 726721210 , tandis que la question 2," anniversaire "est 787184751 . Les Questions 3 et 4 sont vides.

vous pourriez générer le pré-rempli URL en adaptant celui fourni par L'UI pour être un modèle, comme ceci:

function buildUrls() {
  var template = "https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=##Name##&entry.787184751=##Birthday##&entry.1381372492&entry.960923899";
  var ss = SpreadsheetApp.getActive().getSheetByName("Sheet1");  // Email, Name, Birthday
  var data = ss.getDataRange().getValues();

  // Skip headers, then build URLs for each row in Sheet1.
  for (var i = 1; i < data.length; i++ ) {
    var url = template.replace('##Name##',escape(data[i][1]))
                      .replace('##Birthday##',data[i][2].yyyymmdd());  // see yyyymmdd below
    Logger.log(url);  // You could do something more useful here.
  }
};

c'est assez efficace - vous pourriez envoyer L'URL pré-remplie à chaque personne, et ils auraient quelques questions déjà remplies.

betterBuildUrls ()

au lieu de créer notre modèle en utilisant la force brute, nous pouvons le assembler programmatiquement. Cela aura l'avantage que nous pouvons réutiliser le code sans avoir à n'oubliez pas de modifier le modèle.

chaque question sous une forme est un élément. Dans cet exemple, supposons que le formulaire ne comporte que 4 questions, comme vous les avez décrites. L'élément [0] est "Nom", [1] est "Anniversaire", et ainsi de suite.

nous pouvons créer une réponse de formulaire, que nous ne soumettrons pas - à la place, nous remplirons partiellement le formulaire, seulement pour obtenir L'URL de formulaire pré-rempli. Puisque L'API de formulaires comprend les types de données de chaque élément, nous pouvons éviter manipuler le format de chaîne de caractères des dates et d'autres types, ce qui simplifie quelque peu notre code.

( EDIT: il y a une version plus générale de cela dans Comment remplir les cases à cocher Google form? )

/**
 * Use Form API to generate pre-filled form URLs
 */
function betterBuildUrls() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Sheet1");
  var data = ss.getDataRange().getValues();  // Data for pre-fill

  var formUrl = ss.getFormUrl();             // Use form attached to sheet
  var form = FormApp.openByUrl(formUrl);
  var items = form.getItems();

  // Skip headers, then build URLs for each row in Sheet1.
  for (var i = 1; i < data.length; i++ ) {
    // Create a form response object, and prefill it
    var formResponse = form.createResponse();

    // Prefill Name
    var formItem = items[0].asTextItem();
    var response = formItem.createResponse(data[i][1]);
    formResponse.withItemResponse(response);

    // Prefill Birthday
    formItem = items[1].asDateItem();
    response = formItem.createResponse(data[i][2]);
    formResponse.withItemResponse(response);

    // Get prefilled form URL
    var url = formResponse.toPrefilledUrl();
    Logger.log(url);  // You could do something more useful here.
  }
};

fonction yymmdd

tout élément de date dans L'URL du formulaire pré-rempli doit être dans ce format: yyyy-mm-dd . Cette fonction d'assistance étend l'objet Date avec une nouvelle méthode pour traiter la conversion.

lorsque vous lisez dates à partir d'une feuille de calcul, vous finirez avec un objet Date javascript, aussi longtemps que le format des données est reconnaissable comme une date. (Votre exemple n'est pas reconnaissable, donc au lieu de May 9th 1975 vous pouvez utiliser 5/9/1975 .)

// From http://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear().toString();                                    
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
  var dd  = this.getDate().toString();             

  return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};
84
répondu Mogsdad 2017-05-23 12:25:58