2 votes

Puis-je utiliser le script script pour qu'un formulaire Google affiche un texte aléatoire provenant d'une feuille Google ?

Disons que j'ai une liste de 1000 animaux dans une feuille Google (par exemple, chien, chat, vache, ..., girafe). J'aimerais que le formulaire Google choisisse au hasard l'un de ces animaux chaque fois qu'une personne interrogée ouvre le formulaire.

Par exemple, avez-vous déjà vu un __________ ?

Dans ce cas, le blanc serait différent pour chaque personne interrogée (à moins qu'elle n'ait eu la chance d'obtenir au hasard des animaux identiques).

Je dispose actuellement du code permettant de sélectionner aléatoirement un animal dans la feuille Google, mais je n'arrive pas à trouver comment sélectionner aléatoirement un animal pour chaque répondant, puisque la fonction onOpen() ne peut pas se déclencher pour chaque répondant, mais seulement lorsque le propriétaire ouvre le formulaire.

function onOpen(e){
  var animals = worksheet.getRange(2, 1, worksheet.getLastRow()-1, 1)
              .getValues()
              .map(function(o){ return o[0]})
              .filter(function(o){return o !== ""});
  //Logger.log(animals)

  // get random animal
  var animal = animals[Math.floor(Math.random()*animals.length)];

  Logger.log(animal);
  var id = getBlockIdFromTitle()
  Logger.log(id) 

  if (id !== -1){
    updateLink(id, animal)
  }
}

Tout conseil sur la façon de modifier mon code ou d'adopter une approche complètement différente pour obtenir les mêmes résultats sera apprécié. Merci !

1voto

ziganotschka Points 19544

Au lieu de onOpen utilisez la fonction installable onFormSubmit déclencher

Cela vous permettra de mettre à jour la question de votre formulaire après qu'un répondant a soumis le formulaire.

Échantillon :

function onFormSubmit(e){
  var animals = worksheet.getRange(2, 1, worksheet.getLastRow()-1, 1)
              .getValues()
              .map(function(o){ return o[0]})
              .filter(function(o){return o !== ""});
  //Logger.log(animals)

  // get random animal
  var animal = animals[Math.floor(Math.random()*animals.length)];
  FormApp.openById("XXX").getItems()[0].asTextItem().setTitle("Have you ever seen a " + animal + "?");
  }
}

L'esprit :

  • Étant donné que la question ne sera mise à jour qu'à l'envoi du formulaire, les répondants qui ouvriront le formulaire avant que le répondant précédent n'ait fini de le soumettre ne verront pas une version différente du formulaire.

  • Cependant, il n'existe actuellement aucune autre option permettant de modifier le contenu des questions de manière dynamique pour chaque répondant.

  • Si c'est utile pour vous - il existe des options pour remue-ménage l'ordre des questions et les options de réponse aux différents répondants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X