web-dev-qa-db-fra.com

Existe-t-il un moyen de lier une question de style "Choisir dans une liste" dans un formulaire Google à une liste de données (par exemple, dans une feuille de calcul)?

Existe-t-il un moyen de lier une question de style "Choisir dans une liste" dans un formulaire à une liste de données (par exemple, dans une feuille de calcul)?

Cela signifierait que, si de nouvelles options étaient ajoutées à la liste dans la feuille de calcul (ou à tout autre endroit où il serait possible d'héberger la liste), elles apparaîtront automatiquement comme une option à sélectionner dans le formulaire à l'avenir.

Dans mon cas, cela signifierait que les répondants remplissant le formulaire seraient en mesure de sélectionner les volontaires présents à cette session de volontariat particulière à partir de la liste complète des volontaires (plutôt que de taper chaque nom individuellement). serait extrêmement utile s'il était possible de les ajouter aux options de la liste automatiquement plutôt que d'ajouter une nouvelle option manuellement à chaque fois.

Je ne sais pas si cela est possible, mais je l'apprécierais vraiment si quelqu'un pouvait suggérer un moyen de le faire.

10
andy

La réponse de Tom Horwood fonctionne très bien, mais seulement après avoir corrigé une erreur importante de son code. Toutes les références aux éléments LIST_DATA doivent être effectuées à l'aide de l'index j (et non de i). Je n'ai pas assez de karma pour commenter le post de Tom alors voici la version complète:

Vous trouverez ci-dessous le code corrigé. J'ai également changé le nom des éléments LIST_DATA afin qu'ils soient un peu plus descriptifs. Il montre également comment Tom avait pensé à l'avenir (félicitations!) Et fourni la possibilité de mettre à jour plusieurs éléments de formulaire avec le contenu de plusieurs listes de feuilles de calcul.

var FORMID = "PUT_YOUR_FORM_ID_HERE";
var LIST_DATA = [{formFieldTitle:"Job Number", worksheetName:"JobNumbers"},
             {formFieldTitle:"Task 1 Category", worksheetName:"TaskCategories"},
             {formFieldTitle:"Task 2 Category", worksheetName:"TaskCategories"},
             {formFieldTitle:"Task 3 Category", worksheetName:"TaskCategories"},
             {formFieldTitle:"Task 4 Category", worksheetName:"TaskCategories"},
             {formFieldTitle:"Task 5 Category", worksheetName:"TaskCategories"},
             {formFieldTitle:"Task 6 Category", worksheetName:"TaskCategories"},
            ];

function onOpen(e){
  var menuEntries = [];
  menuEntries.Push({name: "Update Lists", functionName: "updateLists"});
  SpreadsheetApp.getActiveSpreadsheet().addMenu("List Updater", menuEntries)
};

function updateLists() {
  var form = FormApp.openById(FORMID);
  var items = form.getItems();
  for (var i = 0; i < items.length; i += 1){
    for (var j = 0; j < LIST_DATA.length; j += 1) {
      var item = items[i]
      if (item.getTitle() === LIST_DATA[j].formFieldTitle){
        updateListChoices(item.asListItem(), LIST_DATA[j].worksheetName);
        break;
      }
    }
  }
}

function updateListChoices(item, sheetName){
  var data = (SpreadsheetApp.getActiveSpreadsheet()
              .getSheetByName(sheetName)
              .getDataRange()
              .getValues());
  var choices = [];
  for (var i = 0; i < data.length; i+=1){
    choices.Push(item.createChoice(data[i][0]));
  }
  item.setChoices(choices);
}

Pour résumer comment le faire fonctionner (pour ceux qui, comme moi, utilisent le script Google Apps pour la première fois). J'ai fait référence aux noms de feuille et aux noms de champs de formulaire dans l'extrait de code ci-dessus pour le rendre plus compréhensible:

  1. Dans la feuille de calcul associée à votre formulaire:

    • Créez une nouvelle feuille de calcul. Cela contiendra la liste des éléments que vous souhaitez ajouter à un champ. Attribuez un nom approprié à la feuille de calcul (par exemple, TaskCategories). Mettez votre liste d'éléments dans la première colonne de cette feuille de calcul. Supprimez toutes les colonnes et les lignes supplémentaires sur cette feuille (cela peut ou peut ne pas être nécessaire - n'a pas été testé)
    • Dans le menu Outils, choisissez "Éditeur de script". Copiez et collez l'extrait de code ci-dessus dans l'éditeur de script. Vous devrez modifier les parties suivantes du script:
      • La valeur de la variable FORMID devra être remplacée par l'ID de votre formulaire. L'ID est le code long (entre les barres obliques) dans la barre d'URL de votre navigateur pour le formulaire souhaité.
      • La variable LIST_DATA devra être modifiée pour s'adapter à votre formulaire et à vos besoins. Vous remarquerez que chaque élément de LIST_DATA est un tuple de formFieldTitle et worksheetName. Le premier est le nom du champ de formulaire (qui doit être un type de champ "choisir dans une liste") - dans l'éditeur de formulaire, il s'appelle Question Title. Ce dernier est le nom de la feuille de calcul que vous avez créée précédemment et contenant la liste des éléments avec lesquels vous souhaitez renseigner le champ. Ajoutez autant de tuples à la liste que nécessaire.
      • Maintenant, sauvegardez le script (Cliquez sur l'icône de sauvegarde)
      • Testez le script en choisissant "Exécuter" dans le menu de l'éditeur de script, puis en choisissant "updateLists". La première fois que vous faites cela, il vous demandera une permission. Si le script réussit, vous pouvez constater que les champs spécifiés sont maintenant renseignés dans votre formulaire. Sinon, vous remarquerez un message d'erreur à l'écran.
  2. Si vous revenez à la feuille de calcul, vous devriez voir un nouvel élément de menu intitulé List Updater. Il comporte un élément Update Lists que vous devez exécuter chaque fois que vous modifiez une ou plusieurs feuilles de calcul de votre/vos liste (s) - il mettra à jour le formulaire en conséquence.

Je remarque également, pour le bénéfice des lecteurs, que FormRanger ne fonctionne pas avec les nouveaux Google Spreadsheets. Les développeurs de FormRanger en disent autant sur leur site web. J'espère que cela changera peut-être à l'avenir, mais comme au moment de la publication, le code ci-dessus fonctionne pour moi et je l'utilise sous une forme déployée pour un client.

3
allnatural

Vous pouvez le faire avec une forme normale et un script, en utilisant Form.getItems (), recherchez l'élément en boucle, puis Item.asListItem (). SetChoices (...)

Voici un exemple de code que j'ai utilisé dans cet exemple sheet et form

var FORMID = "YOUR FORM ID HERE";
var LIST_DATA = [{title:"Who's your tutor", sheet:"TutorName"}]

function onOpen(e){
  var menuEntries = [];
  menuEntries.Push({name: "Update Lists", functionName: "updateLists"});
  SpreadsheetApp.getActiveSpreadsheet().addMenu("List Updater", menuEntries)
}

function updateLists() {
  var form = FormApp.openById(FORMID);
  var items = form.getItems();
  for (var i = 0; i < items.length; i += 1){
    for (var j = 0; j < LIST_DATA.length; j+=1) {
      var item = items[i]
      if (item.getTitle() === LIST_DATA[j].title){
        updateListChoices(item.asListItem(), LIST_DATA[j].sheet);
        break;
      }
    }
  }
}

function updateListChoices(item, sheetName){
  var data = (SpreadsheetApp.getActiveSpreadsheet()
              .getSheetByName(sheetName)
              .getDataRange()
              .getValues());
  var choices = [];
  // If your sheets have headers, change i = 0 to i = 1
  for (var i = 0; i < data.length; i+=1){
    choices.Push(item.createChoice(data[i][0]));
  }
  item.setChoices(choices);
}
2
Tom Horwood

Il existe un module complémentaire Google Forms appelé Valeurs de formulaire , qui offre au moins une méthode semi-automatique: chaque fois que vous modifiez vos réponses dans la feuille de calcul, vous devez ré-alimenter manuellement les choix de votre réponse, mais Au moins, c'est assez simple à faire.

1
kynan

Vous ne pouvez pas faire cela avec les formulaires Google habituels.

Vous pouvez toutefois créer votre propre interface graphique à l'aide de script Google Apps , et plus particulièrement de IService . Sachez cependant que vous devrez recréer toute l'interface graphique. Vous ne pouvez pas utiliser de pièces de votre formulaire existant.

Alternativement, vous pouvez utiliser le GUI Builder . C'est un éditeur WYSIWYG pour les interfaces graphiques de Google Apps Script.

Quel que soit votre choix, vous devriez être prêt à faire de la programmation pour obtenir ce que vous voulez.

0
Vidar S. Ramdal
0
Trendmatcher

Il existe un moyen d'automatiser la mise à jour de la liste en définissant un déclencheur [ 1 ] [ 2 ] pour Update Lists.

Le chemin est Editeur de script -> Ressources -> Déclencheurs du projet actuel

Ensuite, add a new trigger. Pour les exemples donnés, vous pouvez définir updatesList pour exécuter from spreadsheet et On form submission. De cette façon, la fonction onOpen ne sera pas nécessaire.

0
Nayuki Pereira Hara