Question

J'essaie (et je ne réussis pas pour le moment) de remplir un formulaire Google à partir d'une feuille de calcul Google en utilisant les éléments que j'ai récupérés sur ce site Web et cette réponse extrêmement utile fournie par Mogsdad. ici.

Idéalement, je recherche :

  1. Le Logger.log (URL) enregistre les URL de toutes les données stockées dans la feuille de calcul. Est-il possible de simplement enregistrer la dernière entrée et de l'utiliser pour générer l'URL ?

  2. Est-il alors possible que l'URL pré-remplie soit soumise automatiquement une fois renseignée avec les données ?J'ai trouvé cet article utile ici ce qui suggère que cela peut être fait ?

  3. Les données stockées dans la feuille de calcul Google sont des données capturées à partir d'un autre formulaire Google.Cela est dû à la nécessité d'utiliser Excel (manque de connectivité Internet) avec une formule de concaténation pour fusionner toutes les cellules contenant des données en une seule.Celui-ci est ensuite soumis sur l'autre formulaire Google qui a ce script pour diviser les données par colonne, prêt à répondre aux questions.Cela aura-t-il un impact sur le déclencheur nécessaire à la soumission automatique lorsqu'une soumission est effectuée ?

Puis-je ajouter que j'ai une compréhension plutôt limitée à ce sujet, alors allez-y doucement si cela semble plutôt facile à faire !

Était-ce utile?

La solution

est-il possible de simplement enregistrer la dernière entrée et de l'utiliser pour générer l'URL ?

Je ne suis pas sûr de vous suivre ici - dans cette autre réponse, le Logger.log() La déclaration visait simplement à démontrer que vous pouviez générer l'URL correcte si vous souhaitiez la distribuer.Au lieu de l'enregistrer, vous utiliseriez simplement le contenu de la variable url.

Mais passons à autre chose, car je pense que c'est un peu hors de votre chemin.

Est-il alors possible que l'URL pré-remplie soit soumise automatiquement une fois renseignée avec les données ?

Il existe un meilleur point de départ. Pouvons-nous soumettre par programmation des informations à partir d'une feuille de calcul dans un formulaire Google ? Bien sûr!Voir Utilisez App Scripts pour ouvrir le formulaire et effectuer une sélection.C'est un moyen plus fiable de faire le travail que ce que vous voyez dans l'article "URL Tricks".

Dans le cas de la « soumission automatique » ou de la simulation d'une soumission de formulaire, vous n'avez pas du tout besoin de vous soucier de l'URL pré-remplie.C'est un raccourci pour les humains embêtants.Ce que vous voulez, c'est rassembler le payload pour un POST demandez plutôt et demandez à un ordinateur de contourner complètement l'interface utilisateur du formulaire.

Quelque chose à propos d'Excel...Cela aura-t-il un impact sur le déclencheur nécessaire à la soumission automatique lorsqu'une soumission est effectuée ?

(On dirait...) Vous utilisez Form1 pour obtenir des données dans Spreadsheet1, puis vous vous attendez à réagir à la soumission (humaine ?) de Form1 en demandant à la machine de soumettre Form2 après avoir séparé les données de Form1.

Oui, vous devrez faire attention à ce que la division des colonnes soit effectuée avant d'essayer de lire les informations pour soumettre Form2.

Je suggère que vous seriez mieux servi avec une fonction de déclenchement de soumission de formulaire pour Spreadsheet1 qui divise la chaîne reçue de Form1 puis envoie immédiatement le POST à ​​Form2.J'enregistrerais ensuite le fait que cette action s'est produite, en utilisant la technique de Déclencheur d'e-mail de feuille de calcul.

Autres conseils

  1. est-il alors possible pour l'URL pré-remplie d'être soumise automatiquement une fois remplie avec les données? J'ai trouvé cet article utile ici qui suggère que cela peut être fait?

comme Mogsdad a dit

Il y a un meilleur point de départ. Pouvons-nous soumettre de manière programmable des informations d'une feuille de calcul dans une forme Google? Sûr!

Selon un édition à Utilisez des scripts d'application pour ouvrir le formulaire et effectuez une sélection , la charge utile / la méthode postale est maintenant obsolète. L'alternative consiste à utiliser le formulaire Service App. Ci-dessous une adaptation que j'ai faite à ortbetterbuilurls 1 par mogsdad Pour soumettre des réponses au lieu de créer des URL pré-remplies et d'être utilisée dans un fichier de projet Google Script autonome.

Les lignes de code d'origine modifiées sont commentées. J'ai également inséré quelques lignes de retrait pour éviter la barre de défilement horizontale.

/**
 * 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);
    //}
  }
};

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top