Pergunta

Estou tentando (e não estou conseguindo no momento) preencher um Formulário Google a partir de uma planilha do Google usando os itens que peguei neste site e esta resposta extremamente útil fornecida por Mogsdad aqui.

Idealmente, estou procurando:

  1. O Logger.log (URL) registra URLs para todos os dados armazenados na planilha. É possível apenas registrar a última entrada e usá-la para gerar a URL?

  2. É então possível que o URL pré-preenchido seja enviado automaticamente depois de preenchido com os dados?Eu encontrei este artigo útil aqui o que sugere que isso pode ser feito?

  3. Os dados armazenados na planilha do Google são dados capturados de outro Formulário Google.Isso se deve à necessidade de utilizar o Excel (falta de conectividade com a Internet) com uma fórmula concatenada para mesclar todas as células com dados em uma.Em seguida, ele é enviado no outro Formulário Google que tem esse script para dividir os dados por coluna, prontos para responder às perguntas.Isso afetará o gatilho necessário para o envio automático quando um envio for feito?

Devo acrescentar que tenho um entendimento bastante limitado sobre isso, então vá com calma se isso parecer bastante fácil de fazer!

Foi útil?

Solução

é possível apenas registrar a última entrada e usá-la para gerar o URL?

Não tenho certeza se estou entendendo você aqui - naquela outra resposta, o Logger.log() declaração foi apenas para demonstrar que você poderia gerar a URL correta, se quisesse distribuí-la.Em vez de registrá-lo, você apenas usaria o conteúdo da variável url.

Mas vamos em frente, porque acho que isso foge um pouco do seu caminho.

É então possível que o URL pré-preenchido seja enviado automaticamente depois de preenchido com os dados?

Existe um ponto de partida melhor. Podemos enviar programaticamente informações de uma planilha para um formulário do Google? Claro!Ver Use App Scripts para abrir o formulário e fazer uma seleção.É uma maneira mais confiável de fazer o trabalho do que a que você vê na postagem “Truques de URL”.

No caso de "envio automático", ou simulação de envio de formulário, você não precisa se preocupar com o URL pré-preenchido.Esse é um atalho para humanos irritantes.O que você quer é montar o payload para POST solicite, em vez disso, e faça com que um computador ignore completamente a interface do usuário do formulário.

Algo sobre Excel...Isso afetará o gatilho necessário para o envio automático quando um envio for feito?

(Parece que...) Você está usando o Form1 para obter dados na Planilha1 e, em seguida, espera reagir ao envio (humano?) do Form1 fazendo com que a máquina envie o Form2 depois de separar os dados do Form1.

Sim, você precisará ter cuidado para que a divisão da coluna seja feita antes de tentar ler as informações para enviar o Form2.

Sugiro que você seria melhor atendido com uma função de gatilho de envio de formulário para Planilha1 que divide a string recebida do Formulário1 e envia imediatamente o POST para o Formulário2.Eu então registraria o fato de que essa ação ocorreu, usando a técnica de Acionador de e-mail de planilha.

Outras dicas

  1. É então possível que o URL pré-preenchido seja enviado automaticamente depois de preenchido com os dados?Eu encontrei este artigo útil aqui o que sugere que isso pode ser feito?

Como Mogsdad disse

Existe um ponto de partida melhor.Podemos enviar programaticamente informações de uma planilha para um formulário do Google?Claro!

De acordo com uma edição para Use App Scripts para abrir o formulário e fazer uma seleção, o método payload/post agora está obsoleto.A alternativa é usar o serviço Form App.Abaixo está uma adaptação que fiz para evenBetterBuilURLs1 por Mogsdad para enviar respostas em vez de criar URLs pré-preenchidos e para serem usados ​​em um arquivo de projeto de script do Google independente.

As linhas de código originais que foram alteradas são comentadas.Também inseri algumas linhas de interrupção para evitar a barra de rolagem horizontal.

/**
 * 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);
    //}
  }
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top