Immer aktuelle Tabelle Zeile nach formularversendung
Ich bin relativ neu in der Google Apps Script und habe mit ein sehr einfaches Skript, das ich erstellt vor etwa einem Jahr, die ausgelöst wird, wenn ein Nutzer Eingaben über ein Google-Formular. Das Drehbuch wurde perfekt funktioniert, bis ungefähr Mai dieses Jahres und ich habe schon kriechen, um herauszufinden, was passiert, wenn ich habe keine änderungen an meinem code. Ich habe gesucht, viele verschiedene Orte und kann nicht scheinen, um herauszufinden, was falsch ist.
Grundsätzlich habe ich ein Formular, das dem Benutzer die vollständige und senden Sie dann. Nach der Einreichung, das Skript nimmt die Eingaben aus der letzten Zeile und speichert Sie in Variablen, die dann zusammengefügt werden in eine E-Mail Bestätigung, dass erkennt jeder Benutzer die Eingabe eingereicht.
Hier ist mein code:
function acknowledgement() {
var ActiveSheet = SpreadsheetApp.getActiveSheet();
var ActiveRow = ActiveSheet.getActiveRange().getRow();
var emailAddy = ActiveSheet.getRange("E"+ActiveRow).getValue();
var locvar = ActiveSheet.getRange("C"+ActiveRow).getValue();
var employeevar = ActiveSheet.getRange("B"+ActiveRow).getValue();
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Variables");
var contactvar = sh.getRange("A2").getValue();
var subject = sh.getRange("B2").getValue();
var contactvar2 = sh.getRange("C2").getValue();
var linebrk = "<br />";
var msg = "Dear " + employeevar + ","
+ linebrk + linebrk
+ "This confirms that you have completed your review of the latest security presentation."
+ linebrk + linebrk
+ "Your location number is " + locvar + "."
+ "Thank you very much for your participation."
+ linebrk + linebrk
+ contactvar;
var msghtml = '<p>'+msg+'</p>';
var advancedargs = {cc:contactvar2, htmlBody:msghtml};
MailApp.sendEmail(emailAddy, subject, msg, advancedargs);
}
Was derzeit passiert, ist, dass mein code nicht mehr greifen die Nummer der aktuellen Zeile (also die aktive Zeile war nur von einem Benutzer übermittelt). Stattdessen ist es einfach nach der obersten Zeile des Blattes (also meine Zeile überschriften wie "Mitarbeiter Name', 'Email-Adresse', etc.) und zuweisen von Zeilen-überschriften zu den Variablen, so dass ein Fehler beim senden der E-Mail-Bestätigung. Zum Beispiel meine variable emailAddy enthalten würde, "E-Mail-Adresse" verursacht sendEmail zu scheitern.
Jegliches feedback wäre dankbar!
- Ich nehme an, Sie legen einen "trigger" auf Formular Absenden " auf dieser Bestätigung die Funktion richtig ? Zweite Frage: gibt es etwas in Ihrem Blatt unter der letzten Antwort in der Zeile?
- Hallo Serge, ja, ich habe setzen Sie ein "onFormSubmit' auslösen. Und, es gibt nichts unter der letzten Antwort. Zeilen aufgenommen wurden, via Google-Formular, ohne ein Problem, aber ich habe nicht immer die E-Mail-Bestätigungen, noch haben die Nutzer übermitteln Ihre Eingabe. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit getActiveRow im Rahmen eines Formulars ist etwas seltsam, wie kann man nicht denken, dass ein Nutzer tatsächlich aktiv ist auf dem Blatt... ich weiß nicht, warum Sie sich entscheiden, die Vorgehensweise, und ich bin eigentlich Fragen, wie es passiert ist, um die Arbeit für so lange...
Gibt es andere Möglichkeiten zu handhaben Formular-Einsendungen, aber das brauchen die wenigsten änderungen in Ihrem code zu verwenden
getLastRow()
stattgetActiveRange().getRow()
Gibt es ein paar Risiken zu verwenden, die einfache "Strategie", wie es sein könnte, concurrency-Probleme, wenn 2 oder mehr Personen senden ein Formular gleichzeitig.
Die andere Lösung ist, um alle Werte des Feldes direkt aus der event-Eigenschaften, kommt auf die form übertragen wird, da in diesem Fall jede Veranstaltung einzigartig ist, egal wie es kommt, in der Tabelle aber Ihr Skript muss umgeschrieben werden tiefer.
Ich glaube, dass Google Forms hat gut abgedeckt, die den Fall, den Sie erwähnen, wird der trigger "onFormSubmit" der Tabelle erhält ein Objekt als parameter alle Informationen, die Sie benötigen.
Stimme ich Serge, dass das script umgeschrieben werden, tief, aber auf jeden Fall, es wird sparen Sie viele Probleme.
Gehen Sie auf die Dokumentation, insbesondere in "Form einer Tabelle Vorlegen, Events" https://developers.google.com/apps-script/understanding_events.
Du suchst den code
e.range.getRow()
.So haben wir:
Werden Sie auch brauchen, um das setup einen trigger, um die
onFormSubmit
Funktion.Nun (endlich) Spaß: immer wenn ein Formular abgeschickt wird, werden Sie wissen, die Zeile, die es entspricht. Spaß haben!