2016-03-23 9 views
0

Ich habe andere ähnliche Beiträge angeschaut und habe Hilfe beim Einrichten des Triggers erhalten, aber immer noch einen Fehler.
Ich habe versucht, das Senden eines PDF-Dokuments zu automatisieren, das als Antwort auf eine Formularübermittlung in Google Apps per E-Mail gesendet werden soll. Ich habe ein im Web freigegebenes Skript verwendet, um loszulegen, und habe einige veraltete Begriffe korrigiert.
Ich erstellte eine Dokumentvorlage mit keyItems eingebettet als Platzhalter und ich erstellte ein Formular zum Erfassen von Daten. Die mit dem Formular verknüpfte Tabelle erfasst Daten wie geplant. Ich habe das mit der Tabelle verknüpfte Skript bearbeitet, um die für die Übermittlung des Formulars erforderliche Arbeit zu erledigen. Der Trigger sieht korrekt aus, um ausgeführt zu werden on form submitfrom the spreadsheet. Meine Frage ist über den Fehler, den ich wiederholt bezüglich der e.values undefined bin. Ich nahm an, dass ich diese als e.values[0] und weiter bezeichnen würde, wenn ich die Variablen deklarierte - d. H. Sie würden auf ihrer Reihenfolge in dem aus den Tabellenkalkulationsfeldern gezogenen Array basieren. Es tut mir leid, dass ich langatmig bin. Wenn ich Dummy-Inhalt in den Variablen platziere, funktioniert es und sendet die pdf, so funktioniert der eigentliche Mechanismus in Ordnung, aber meine e.values funktionieren nicht.Google Script e.values ​​Fehler

Hier ist mein Skript // Certificate of Completion

// Vorlage von Google Text & Tabellen und Namen holen

var docTemplate = "1V_PqCBZ9vWmmIELp47X12iNtdwRCqHyOyey6VPL0o0Q"; 
var docName = "CertificateOfCompletion"; 

// Wenn eingereichten Formular Infos von Form erhalten und setzen als Variablen

function onFormSubmit(e) { 
    var name = e.values[2]; 
    var email = e.values[3]; 
    var date = e.values[4]; 

// temporäre Arbeitskopie der Vorlage doc für den Übergeber

erstellen
var copyId = DriveApp.getFileById(docTemplate).makeCopy(docName+' for '+name).getId(); 

// öffnen Sie die temporäre doc

var copyDoc = DocumentApp.openById(copyId); 

// Skript anweisen, in den doc zu gehen

var copyBody = copyDoc.getBody(); 

// ersetzen Platzhalter in der doc mit Daten aus einer vorgelegten Form

copyBody.replaceText('keyFullName', name); 
copyBody.replaceText('keyDate', date); 
copyDoc.saveAndClose(); 

// erstellen PDf

var pdf = DriveApp.getFileById(copyId).getAs("application/pdf"); 

// E-Mail-Empfänger senden

var subject = "Certificate"; 
var body = "Congratulations!" + name + " Here is your certificate of completion " ; 
MailApp.sendEmail(email, subject, body, {htmlBody: body, attachments: pdf}); 

// löschen temporäre Dokument

DriveApp.getFileById(copyId).setTrashed(true); } 

Antwort

0

Haben Sie versucht stattdessen benannten Werte verwenden.

Heres ein Beispiel

var handling = Number(e.namedValues["Call Handling"]); 
var security = Number(e.namedValues["Security"]); 
var agentName = String(e.namedValues["Agent Name"]); 

Dies sind Fragen, in einer Form, die ich habe. Das Bit nach dem e.namedValues ​​["Text hier"]); , ersetzen Sie den Text hier mit dem, was Ihre Spalte in Formularantworten genannt wird, dies wird der Name der Frage sein.

Ich bin mir nicht sicher, warum e.values ​​[0] für Sie nicht funktioniert, wie es für mich funktioniert.

Mein Skript ist in der Tabelle, mit einem OnFormSubmit-Trigger über das Menü installiert.

Denken Sie auch daran, um Ihr Skript zu testen, müssen Sie ein Formular summit, das Drücken der Play-Taste wird nicht funktionieren, da kein Ereignis an Ihre Funktion übergeben wird.