2017-05-08 1 views
0

Ich habe ein Skript, das ein vorgefülltes Google-Formular aus einer Tabelle erstellt. Ich kann die vorgefüllte URL leicht genug bekommen und es funktioniert wie erwartet. Es fällt mir schwer, das vorgefüllte Formular per E-Mail zu senden. Ich kann die HTML-Ausgabe mit HtmlService abrufen und an den Text der E-Mail anhängen, aber es ist nicht interaktiv. Ich kann Textfelder ausfüllen, kann jedoch keine Mehrfachauswahlelemente auswählen oder das Formular senden.Senden Sie das vorgefüllte Google-Formular per E-Mail

Script

// A form is already built... 

var logs = ss.getDataRange().getValues(); 
var formResponse = form.createResponse(); 

for(var j=0;j<7; j++) {       
    formItem = items[j+2].asTextItem(); 
    response = formItem.createResponse(weekData[i][j]); 
    formResponse.withItemResponse(response); 
} 

var url = formResponse.toPrefilledUrl(); 

// Mark as sent so it isn't caught in the next trigger  
logs.getRange(i+1, logs.getLastColumn()).setValue('sent'); 

var response = UrlFetchApp.fetch(url); 
var htmlBody = HtmlService.createHtmlOutput(response).getContent(); 

MailApp.sendEmail({ 
    to: "[email protected]", 
    subject: "Confirm Intern Hours", 
    htmlBody: htmlBody 
}); 

Irgendwelche Ideen auf, wie man in einer E-Mail dies als eine funktionale Form senden? Im schlimmsten Fall kann ich einen verkürzten Link einfügen und sie auf das Live-Formular klicken.

Antwort

0

Wenn Sie nur nach einer vorgefüllten Multiple-Choice-Antwort auf das Formular suchen, das aus dem E-Mail-Text gesendet wird, können Sie einen vorgefüllten Link für jedes der Multiple-Choice-Elemente erstellen HTML-E-Mail, und senden Sie dann das vorgefüllte Formular über den Link in der E-Mail.

Wenn Sie auch die Eingabetextfelder benötigen, die vom Benutzer aus der E-Mail ausgefüllt werden müssen, würde das wahrscheinlich ein wenig mehr Arbeit erfordern..aber es kann möglich sein, replace() zu verwenden.

function emailForm() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var form = FormApp.openByUrl(ss.getFormUrl()); 
    var items = form.getItems(); 
    // or wherever your Multiple Choice item is in the list 
    var choice_item = items[0].asMultipleChoiceItem(); 
    var choice_opts = choice_item.getChoices(); 
    var prefilled_set = []; 

    var logs = ss.getDataRange().getValues(); 
    var formResponse = form.createResponse(); 

    for(var j=0;j<7; j++) {       
    formItem = items[j+2].asTextItem(); 
    response = formItem.createResponse(weekData[i][j]); 
    formResponse.withItemResponse(response); 
    } 

    var url = formResponse.toPrefilledUrl(); 

    // Create a prefilled link for each multiple choice option 
    choice_opts.forEach(function (e) { 
    var choice_response = choice_item.createResponse(e.getValue()); 
    formResponse.withItemResponse(choice_response); 

    var prefill_url = formResponse.toPrefilledUrl(); 
    // Change the URI from view to response and Shorten the URL 
    var tiny_url = form.shortenFormUrl(
         prefill_url.replace("/viewform?", "/formResponse?")); 
    // Make HTML Link 
    var html_link = '<a href="' + tiny_url + '"> ' + e.getValue() + ' </a>'; 

    // Push each option link into an array 
    prefilled_set.push(html_link); 
    }); 

    var response = UrlFetchApp.fetch(url); 

    // Get your HTML Output and Add the Multiple Choice links to it 
    var htmlBody = HtmlService.createHtmlOutput(response + prefilled_set.toString()) 
          .getContent(); 

    MailApp.sendEmail({ 
    to: "[email protected]", 
    subject: "Confirm Intern Hours", 
    htmlBody: htmlBody 
    }); 
} 

Dies ist das Stück, das die vorgefüllten Links senden Sie das Formular aus E-Mail macht:

prefill_url.replace("/viewform?", "/formResponse?") 

Auch wird wahrscheinlich formatiert werden soll die Links in irgendeiner Weise mache sie mehr aus. Oder ersetzen Sie sogar response durch Ihre eigenen html template

Verwandte Themen