2016-03-23 7 views
0

Meine Firma hat ein Google Form-Formular erstellt, um einen unserer Prozesse erheblich zu vereinfachen. Das Google-Formular basiert auf der Master-Tabelle, die alle vom Formular eingegebenen Daten enthält. Diese Tabelle filtert dann die Formularübergabe heraus und sendet die Daten an die Tabelle jeder Abteilung, die, wie zuvor erwähnt, alle Informationen aus der "Master-Tabelle" erhält.Senden von E-Mail-Benachrichtigungen Google Sheets

Wir hatten es zuvor eingerichtet, also würden Mitarbeiter, die diese Anfragen in ihre Tabellenkalkulation aufnehmen oder ablehnen oder bestätigen, eine E-Mail-Benachrichtigung erhalten, wenn jemand "Genehmigt" oder "Verweigert" eingegeben hat. Kürzlich haben wir es so geändert, dass, wenn eine bestimmte Person eine Anfrage für einen Kunden eingereicht hat, diese automatisch genehmigt wird, aber wenn wir dies getan haben, funktioniert die E-Mail-Benachrichtigung nicht mehr, weil niemand manuell für diese Anfragen "Genehmigt" oder "Verweigert" eingibt. Es funktioniert immer noch, wenn es manuell eingegeben wird, aber wenn die Zelle automatisch ausgefüllt wird, funktioniert die sendNotification nicht.

Da in die einzelnen Abteilungsdatenblätter keine tatsächlichen Daten eingegeben werden, wollten wir den Benachrichtigungstrigger auf das "Master Sheet" setzen, aber wir haben eine Menge Zeit, die E-Mail-Benachrichtigung zu senden. Grundsätzlich wollen wir es so, wenn irgendeine Zelle in "Spalte F" eine bestimmte Liste von E-Mail-Adressen enthält, wird sie eine E-Mail an eine dritte Partei senden, die sie darüber informiert, dass sie tatsächlich fortfahren und die Änderungen vornehmen soll.

Hier ist, was wir bisher haben. Beachten Sie, dass dies der Code ist, der ursprünglich funktioniert hat. Ich habe viele verschiedene Variationen der Dinge ausprobiert und haben überhaupt kein Glück gehabt, aber ich bin nicht der gebildetsten Coder:

function sendNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Form Responses 3"); 
    //Get Active cell 
    var mycell = ss.getActiveSelection(); 
    var cellcol = mycell.getColumn(); 
    var cellrow = mycell.getRow(); 
    var cellValue = mycell.getValue(); 

    var activeUser = Session.getActiveUser(); 
    var recipients = "[email protected]"; 
    var subject = "Update to "+ss.getName(); 
    var body = activeUser + " has marked row " + cellrow + " \"" + cellValue + "\" in \"" + ss.getName() + "\". Visit " + ss.getUrl() + " to view the changes."; 

    if (cellcol == 2) { 
    if (cellValue.indexOf('[email protected]') >= 0) { 
     var subject = "Lunch Is Served"; 
     Logger.log('Sending approval notification of row ' + cellrow + ' to ' + recipients); 
     MailApp.sendEmail(recipients, subject, body); 
    } 
    } 
} 

Bitte beachten Sie, dass wir lastRowNumber nicht (zumindest verwenden kann ich didn‘ Ich denke, wir könnten) weil wir bereits mehr als tausend Zeilen aufgelistet haben, so dass die Informationen automatisch in das Array einfließen. Schließlich ist unser aktueller Trigger auf "On Form Submission" gesetzt, weil wir wollen, dass diese E-Mails wie die Formulare eintreffen eingereicht.

Ich habe eine Beispiel-Tabelle für Sie Jungs enthalten, um zu sehen. Bitte verwenden Sie [email protected] als Ihre E-Mail-Adresse, wenn Sie das Formular ausfüllen.

Das Google Blatt kann auf der folgenden Website zu finden: Test Sheet!

Vielen Dank und ich freuen uns auf Ihre Antworten auf das Lesen!

Antwort

0

Sie nicht die Zeile verwenden:

var mycell = ss.getActiveSelection(); 

Wenn diese Funktion von einem läuft „On Form Submit“ Trigger gibt es keine aktive Auswahl. Für das Ereignisobjekt "On Form Submit" ist jedoch eine Eigenschaft verfügbar, die den aktuell bearbeiteten Bereich angibt. Sie müssen das Ereignisobjekt aus der Formularübergabe abrufen. Dann haben Sie 3 Möglichkeiten. 1) Holen Sie sich einfach die Werte 2) Holen Sie ein Objekt von Fragen und deren Werte 3) Holen Sie sich den Bereich des Bereichs bearbeitet. Zuerst erhalten Sie das Ereignisobjekt, das an die Funktion übergeben wird. Wenn das Formular gesendet wird, werden Daten automatisch der Funktion zur Verfügung gestellt, die mit dem Auslöser für das Senden in Formular verknüpft ist.Der Brief e wird typischerweise als Variablennamen verwendet, um das Ereignis-Objekt zu erhalten:

function sendNotification(e) { 

Aber Sie einen beliebigen Variablennamen verwenden können:

function sendNotification(objOfData) { 

Apps Script Documentation - Spreadsheet - On Form Submit

function sendNotification(e) { 
    var cellValue = e.values[4];//Get the value in column 5 
+0

Vielen Dank für Antwort @Sandy Gut. Die einzige Sache ist, dass, wenn ich versuche, diesen Code auszuführen, es mir diese Fehlermeldung gibt: "TypeError: Kann Eigenschaft" -Werte nicht von undefined lesen. (Zeile 8, Datei "Code") "Haben Sie irgendwelche Empfehlungen zu diesem Thema ? Ich habe übrigens ein neues Skript unter Ihrem Namen auf dem Blatt erstellt, wenn Sie es noch einmal ansehen wollten. Wäre es nicht e.values ​​[5] statt [4], da es sich um die fünfte Frage handelt, die auf dem Formular gestellt wird? Es tut mir leid, dass ich in diesem Zeug noch ganz neu bin. – dhjeffery89

+0

Noch eine Sache, wir haben unser normales Blatt eingerichtet, um automatisch Ihren Benutzernamen zu protokollieren, was "Spalte B" in unserer tatsächlichen Tabelle ausfüllt und was wir in unserer E-Mail-Benachrichtigung verwenden wollten. Ich habe es eingerichtet, um die Frage auf dem Blatt so zu stellen, weil es mich nicht eine Option wählen ließ, um den Benutzernamen automatisch zu loggen. Nochmals vielen Dank, dass du mir geholfen hast. – dhjeffery89

+0

Das Objekt 'e' ist nicht definiert, wenn Sie den Code im Code-Editor ausführen. Die einzige Möglichkeit, mit der ein Objekt an ein Objekt "e" übergeben wird, ist das Senden des Formulars, und diese Funktion ist die Funktion für den Trigger "Einreichen". Die Werte im Array haben einen auf Null basierenden Index. Der erste Wert hat einen Index von Null. –