Mettre à jour dynamiquement Formulaire de Google "Choisir dans la liste" options de la colonne dans la feuille de calcul
J'essaye de configurer un Formulaire de Google qui permettra de créer un " choisissez dans la liste' question, chaque option étant tirée des lignes dans une colonne spécifique.
J'ai essayé ce code, mais il n'a pas fonctionné pour moi.
Le code que j'ai à ce jour est ci-dessous. Je suis en mesure de créer la forme désirée en question avec les données provenant d'une seule ligne dans la colonne spécifique (dans ce cas, la dernière ligne de la colonne).
Si quelqu'un peut aider en m'indiquer la bonne direction quant à la façon d'attribuer à chaque ligne sélectionnée à une seule question.
Aussi si c'est une sorte de moyen de mettre à jour dynamiquement la question des options à chaque fois que la feuille de calcul est mis à jour.
var idColumn = 1; //ID of the selected column
//gets document ID from spreadsheet
//(not 100% sure the role of all of these lines, have worked it out from other examples of code online)
function spreadSheetGetter() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var lr = rows.getLastRow();
var docId = sheet.getRange(lr,idColumn,1,1).getValue(); //gets the data from the last row in selected column
fillFormData(docId);
}
//fills for with document ID
function fillFormData(docId) {
var form = FormApp.openById('MY FORMS ID');
var item = form.addListItem();
item.setTitle('Select Existing Customer') //creates the choose from list question
.setChoices([
item.createChoice(docId), //data from row 1
item.createChoice(docId) //data from row 2 etc...
])
}
OriginalL'auteur Method | 2015-05-22
Vous devez vous connecter pour publier un commentaire.
Cette déclaration:
obtient une seule valeur. Je pense que vous voulez toutes les valeurs dans la colonne, il faut donc utiliser la
getValues()
("s" à la fin) méthode pour obtenir un tableau à deux dimensions de valeurs. Et changer lenumRows
paramètre (nombre de lignes) à lalr
variable. Aussi, vous souhaitez démarrer dans la rangée 2, probablement. La syntaxe est la suivante:Ainsi, les paramètres doivent être définis comme ceci:
Si, dans la feuille de calcul, ligne un a des noms d'en-tête, vous ne voulez pas inclure l'en-tête dans la liste des éléments. C'est pourquoi le premier paramètre est réglé sur le numéro 2, pour démarrer à partir de la ligne 2.
Ensuite, vous aurez besoin pour traiter les données dans le tableau à deux dimensions, et de créer un nouveau tableau qui est dans le format requis pour
setChoices(choices)
méthode, afin d'ajouter à chaque valeur de la liste. Vous aurez besoin d'une programmation en boucle. Cela va créer un nouveau tableau de valeurs de poste à chaque fois, donc les valeurs en cours dans la colonne sera mis à jour pour la liste.La fonction complète ressemblerait à quelque chose comme ceci:
getValues
&getRange
, fait beaucoup plus de sens pour moi maintenant. Où serait la dernière section de code que vous avez posté être placé? J'ai essayé de le mettre: 1. entre monspreadSheetGetter
&fillFormData
fonctions, 2. après monfillFormData
fonction, et 3. dans lefillFormData
fonction (juste après les variables). Je reçois un message d'erreur Manquant ; avant l'énoncé. (ligne XX, le fichier "Copie de Code") pour la ligne suivante:newItem = "item.createChoice('" + thisValue "')";
Voir mise à jour de la réponse à la fin. La seule partie que je ne suis pas sûr de savoir comment la chaîne de formule:
newItem = "item.createChoice('" + thisValue + "')";
sera finalement formaté à l'intérieur de la matrice. Et je viens de remarquer que j'avais une erreur dans la chaîne de la formule aussi. J'avais quitté un signe plus.Super! @SandyGood Qui n'affiche plus d'erreur. Maintenant, je reçois une erreur Ne peut pas convertir le Tableau de Choix[]. (ligne 34, fichier "Copie de Code") pour le code
.setChoices(arrayOfItems)
. J'ai enlevé le " de " de autour de la ligne:newItem = item.createChoice('" + thisValue + "');
et l'erreur n'est plus à l'affiche. Il remplit maintenant chaque option dans le setChoices parfaitement. La seule question qui demeure est que chaque fois que le script s'exécute, il crée une nouvelle question dans le formulaire. Est-il un moyen de l'écriture sur la question, ou peut-être supprimer toutes les questions, puis exécutez le script existant?Vous devriez être en mesure d'obtenir un élément par son ID. Lien vers la Documentation Veuillez cocher la réponse correcte).
Désolé j'ai oublié de mentionner que j'ai édité le mentionnés ci-dessus de la ligne de
newItem = item.createChoice(thisValue);
afin de remplir la setChoices options correctement. Je vais regarder la documentation et voir si je peux travailler. Merci à tous pour votre aide!OriginalL'auteur Alan Wells
Je ne suis pas sûr si cela va vous aider, mais il y a un moyen plus simple que de coder cette opération vous-même. Il est un des formulaires google add-on appelé FormRanger qui va remplir automatiquement les champs dans une "Liste de sélection" question en se basant sur les infos de former les lignes d'une autre feuille de calcul. Vous pouvez l'installer en allant à l'Add-on du menu de la forme, puis l'ajout d'un nouvel add-on.
Voici un lien vers la description de FormRanger. Il y a un tutoriel dans le présent document ainsi.
https://docs.google.com/document/d/1qidnsrTShKU9kPnYz4nubHs2cK9yWnQ2z_XBoqgdIhs/edit
OriginalL'auteur krishnab
Espère que je ne suis pas trop tard pour cela, mais j'ai réussi à obtenir la solution mentionnée dans la question, et il semble une meilleure option, car elle met à jour un formulaire qui est déjà construit, il n'y a pas besoin d'en créer un nouveau ou une nouvelle option pour cela. J'ai aussi modifié le code présenté par Entièrement naturels et ChrsF sur le post original de sorte qu'il accepte les plages nommées (ou gammes réguliers, d'ailleurs), donc de réduire le nombre de feuilles que vous auriez besoin sur votre feuille de calcul.
Vous devez placer ce script dans la feuille de calcul avec les options, de sorte qu'il peut exécuter chaque fois que vous modifiez ou dans les intervalles de l'ensemble:
Après que vous l'avez obtenu à wokr, vous pouvez seta triger pour exécuter le "updateLists" la fonction de chaque modification apportée dans votre feuille de calcul, puis il n'y a pas besoin de mettre à jour manuellement l'option avec la touche menu.
J'ai été seraching pour cette solution pour un certain temps maintenant et je suis heureux je l'ai trouvé. Espérons qu'il vous aide aussi.
OriginalL'auteur Fogolin
J'ai édité les fonctions dans la réponse ci-dessus à des œuvres à la fois de la Feuille et de la Forme:
J'ai trouvé id pour les Feuilles et la Forme à partir d'Url, à la place de l'ListItem id, j'ai utilisé le code fourni ici:
OriginalL'auteur ggagliano