2012-12-03 8 views
8

Ho configurato un modulo utilizzando googledocs. Voglio solo avere i dati effettivi inseriti nel modulo inviato via email, al contrario della risposta generica che informa che il modulo è stato completato.impostazione dello script per includere i dati del modulo Google Documenti nella notifica e-mail

Non ho alcuna competenza o esperienza con il codice ecc., Ma ero sicuro di averlo risolto. Ho passato ore + ore e non ho avuto fortuna.

Il mio modulo è veramente basic.it ha 5 campi. 4 di questi sono solo risposte testuali e una scelta multipla.

Ho trovato questo tute online (http://www.labnol.org/internet/google-docs-email-form/20884/) che penso riassume ciò che sto cercando di fare, ma non lo sono stato in grado di farlo funzionare.

da questo sito ho inserito il seguente codice:

function sendFormByEmail(e) 
{  
    var email = "[email protected]"; 

    var subject = "Google Docs Form Submitted"; 

    var s = SpreadsheetApp.getActiveSheet(); 
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];  
    var message = "";  

for(var i in headers) 
message += headers[i] + ' = '+ e.namedValues[headers[i]].toString() + "\n\n"; 

    MailApp.sendEmail(email, subject, message); 
} 

Per questo, ottengo la seguente risposta: ->

Lo script, il modulo di contatto Mailer, ha recentemente riuscito a finire con successo. Di seguito è riportato un riepilogo degli errori. Per configurare i trigger per questo script o modificare le impostazioni per ricevere future notifiche di errore, fare clic qui.

Lo script è utilizzato dal documento 100% Club.

Dettagli:

Start    Function  Error Message              Trigger  End 
12/3/12 11:06 PM sendFormByEmail TypeError: Cannot call method "toString" of undefined. (line 12) formSubmit 12/3/12 11:06 PM 

È chiunque in grado di aiutare a far luce su questo per me? Suppongo che non includa alcuni dati netti, ma onestamente non ne ho idea.

risposta

-2

Non è necessario utilizzare uno script. Vai semplicemente a Strumenti >> Regole di notifica sul foglio di lavoro Google. Qui è possibile modificare le impostazioni per ricevere un'e-mail con le informazioni desiderate ogni volta che viene modificato il documento.

+0

sfortunatamente non .. invia un'e-mail di notifica, quando qualcuno completa un modulo ecc., Ma l'e-mail dice solo che è stata aggiornata, clicca qui per verificare. Sto volendo inserire i dati, inclusi nell'e-mail di notifica. – user1872449

4

Soluzione alternativa http://www.labnol.org/internet/google-docs-email-form/20884/ È necessario impostare lo script app per inoltrare i dati come e-mail.

+0

Volevo solo condividere che questo ha funzionato per me. Ho modificato lo script per analizzare il modulo e in effetti compilarlo. Pubblicherò la risposta per condividere il codice ma volevo commentare che questa è "la mia risposta risolta". –

0

Se si tratta di un modulo Google, nel foglio di lavoro sono presenti colonne aggiuntive non presenti nel modulo? Se elimini quelle colonne aggiuntive, allora ha iniziato a funzionare per me.

2

Io punto al commento di cui sopra che ha risolto per me: https://stackoverflow.com/a/14576983/134335

ho preso quel post un passo ulteriore:

  • ho rimosso la notifica normale. Lo script app rende ridondante e inutile il testo generico ora
  • Ho modificato lo script per analizzare effettivamente i risultati e creare la risposta di conseguenza.
 
function sendFormByEmail(e) 
{ 
    var toEmail = "changeme"; 
    var name = ""; 
    var email = ""; 

    // Optional but change the following variable 
    // to have a custom subject for Google Docs emails 
    var subject = "Google Docs Form Submitted"; 
    var message = ""; 

    // The variable e holds all the form values in an array. 
    // Loop through the array and append values to the body. 

    var s = SpreadsheetApp.getActiveSheet(); 
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; 

    // Credit to Henrique Abreu for fixing the sort order 
    for(var i in headers) { 
    if (headers[i] = "Name") { 
     name = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Email") { 
     email = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Subject") { 
     subject = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Message") { 
     message = e.namedValues[headers[i]].toString(); 
    } 
    } 

    // See https://developers.google.com/apps-script/reference/mail/mail-app#sendEmail(String,String,String,Object) 
    var mailOptions = { 
    name: name, 
    replyTo: email, 
    }; 

    // This is the MailApp service of Google Apps Script 
    // that sends the email. You can also use GmailApp here. 
    MailApp.sendEmail(toEmail, subject, message, mailOptions); 

    // Watch the following video for details 
    // http://youtu.be/z6klwUxRwQI 

    // By Amit Agarwal - www.labnol.org 
} 

Lo script utilizzato nell'esempio è estremamente generica, ma molto resistente per cambiare perché il messaggio è costruito come una coppia chiave/valore dei campi del form presentati.

Se si utilizza il mio script, è necessario modificare il ciclo for se le istruzioni devono corrispondere ai campi. Dovrai anche modificare la variabile toEmail.

Grazie ancora per la domanda e le risposte. Stavo per abbandonare Google Forms in quanto la risposta generica non è mai stata sufficiente per quello che stavo cercando di fare.

Infine, in risposta al problema effettivo sopra "toString di undefined" significa in particolare che uno dei campi del modulo è stato inviato come vuoto. Se dovessi indovinare, direi che l'autore ha usato questo solo per i moduli in cui erano richiesti tutti i campi o sarebbe stato messo in atto un rapido controllo indefinito.

qualcosa come il seguente dovrebbe funzionare:

 
for(var i in headers) { 
    var formValue = e.namedValues[headers[i]]; 
    var formValueText = ""; 
    if (typeof(formValue) != "undefined") { 
    formValueText = formValue.toString(); 
    } 
    message += headers[i] + ' = '+ formvalueText + "\n\n"; 
} 

non ho ancora testato questo con precisione, ma è un modo abbastanza standard di assicurarsi l'oggetto è definito prima di provare metodi come toString(), che chiaramente non lo farà lavoro.

Questo spiegherebbe anche la risposta di Jon Fila. Lo script assume ciecamente tutte le righe di intestazione nella risposta inviate dal modulo. Se uno dei campi non è richiesto o il foglio di calcolo contiene campi che non sono più nel modulo, otterrai molti oggetti non definiti.

La sceneggiatura avrebbe potuto essere codificata meglio, ma non avrò colpa dell'autore in quanto era chiaramente destinato a essere solo una prova di concetto. Il fatto che menzionino la risposta alla correzione ma non fornisce alcun esempio sull'implementazione ha reso perfettamente chiaro.

Problemi correlati