Domanda

Sto provando (e non riescono al momento) per popolare un modulo di Google da un foglio di calcolo di Google utilizzando gli elementi che ho raccolto da questo sito Web e questa risposta estremamente utile fornita da Mogsdad . .

Idealmente, sto cercando:

    .
  1. The logger.log (URL) registra gli URL per tutti i dati memorizzati nel foglio di calcolo, è possibile semplicemente registrare l'ultima voce e utilizzarlo per generare l'URL?

  2. è quindi possibile per l'URL pre-riempito di inviare automaticamente una volta popolata con i dati? Ho trovato questo utile articolo qui che suggerisce che questo può essere fatto?

  3. I dati memorizzati nel foglio di calcolo Google sono i dati acquisiti da un altro modulo Google. Ciò è dovuto alla necessità di utilizzare Excel (mancanza di connettività Internet) con una formula concatenata per unire tutte le celle con i dati in uno. Questo viene quindi inviato sull'altra forma di Google che ha questo script to split I dati fuori dalla colonna pronti a rispondere alle domande con. Questo impatto il trigger necessario per l'invio automatico quando viene effettuata una sottomissione?

  4. Posso aggiungere che ho una comprensione piuttosto limitata su questo quindi per favore vai facilmente se questo sembra piuttosto facile da fare!

È stato utile?

Soluzione

.

È possibile registrare semplicemente l'ultima voce e utilizzarlo per generare l'URL?

Non sono sicuro di seguirti qui - in quella altra risposta, l'affermazione Logger.log() era solo per dimostrare che potresti generare l'URL corretto, se volevi distribuirlo. Invece di registrarlo, useresti solo il contenuto della variabile url.

Ma andiamo avanti, perché penso che questo sia un po 'fuori dal tuo percorso.

.

È quindi possibile per l'URL pre-riempito di inviare automaticamente una volta popolata con i dati?

C'è un punto di partenza migliore. Possiamo inviare a livello di programmazione le informazioni da un foglio di calcolo in un modulo di Google? Sicuro! Vedi Usa gli script dell'app per aprire il modulo e Fai una selezione . È un modo più affidabile per fare il lavoro di quello che vedi nel post "URL Tricks".

Nel caso di "Auto Invia", o simulando un modulo di presentazione del modulo, non è necessario preoccuparsi del tutto l'URL pre-riempito. Questo è una scorciatoia per gli umani pesky. Quello che desideri è mettere insieme il payload per una richiesta POST, invece, e avere un computer aggira il modulo UI del tutto.

.

Qualcosa su Excel ... questo impatto il trigger necessario per inviare automaticamente quando viene effettuata una presentazione?

(suoni come ...) Utilizzo di Form1 per ottenere dati in foglio di calcolo1, quindi aspettarsi di reagire alla sottomissione (umana?) di Form1 avendo la macchina inviare il modulo2 dopo aver interrotto i dati da Form1. Sì, dovrai stare attento che la split della colonna viene eseguita prima di provare a leggere le informazioni per inviare il modulo2.

Suggerisco che tu sia meglio servito con una funzione di trigger di sottomissione in formato per il foglio di calcolo1 che divide la stringa ricevuta da Form1 quindi invia immediatamente il post su Form2. Daremo quindi il fatto che questa azione si è verificata, utilizzando la tecnica da handsheet Email Trigger .

Altri suggerimenti

.
  1. è quindi possibile per l'URL pre-riempito di inviare automaticamente una volta popolata con i dati? Ho trovato questo utile articolo qui che suggerisce che questo può essere fatto?

AS MOGSDAD ha detto

.

C'è un punto di partenza migliore. Possiamo inviare a livello di programmazione le informazioni da un foglio di calcolo in un modulo Google? Sicuro!

Secondo una modifica a Utilizzare gli script dell'app per aprire il modulo e effettuare una selezione , il metodo payload / post è ora obsoleto. L'alternativa è utilizzare il servizio APP del modulo. Di seguito è riportato un adattamento che ho realizzato a ancorabetterbuilurls 1 di mogsdad per inviare risposte invece di creare URL pre-riempiti e da utilizzare in un file di progetto di Google Script stand-alone.

Le linee di codice originali modificate vengono commentate. Inoltre ho inserito alcune linee di rottura per evitare la barra di scorrimento orizzontale.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top