Ich habe ein Google App-Skript, das Formulardaten in eine Tabelle schreibt, wenn es auf meiner Website eingereicht wird.Einen bestimmten Teil von e.parameter erhalten
Ich habe viele verschiedene Formen, und ich würde gerne ihre Daten in die gleiche Tabelle, sondern auf andere "Tabellen" (d. H. Tabs @ unten "form1, form2, form3") innerhalb schreiben.
Jedes Formular hat einen versteckten Eingang, der es benennt. Ich denke, dass ich durch das Isolieren des Eingabe-Namens eine if statement
schreiben kann, die die Formulardaten auf dem rechten Blatt verschiebt.
Beispiel HTML:
<input type="hidden" name="form-type" value="form1">
*Name: <input type="text" name="john">
<input type="hidden" name="form-type" value="form2">
*Name: <input type="text" name="peter">
Javascript auf der Website - die Daten für POST'ing zu Google App Script Handhabung:
function handleFormSubmit(event) { // handles form submit withtout any jquery
event.preventDefault(); // we are submitting via xhr below
var data = getFormData(); // get the values submitted in the form
var url = event.target.action;
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// url encode form data for sending as post data
var encoded = Object.keys(data).map(function(k) {
return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]);
}).join('&');
console.log("ENCODED IS: " + encoded);
xhr.send(encoded);
}
}
Die codierten Daten sieht wie folgt aus:
ENCODED IS: form-type=form1&name=john
OR
ENCODED IS: form-type=form2&name=paul
Die Google App Script-Funktion, die für das Füllen der Tabelle zuständig ist, lautet:
try {
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName('form1'); // here is where to define which sheet a response should be added to
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1; // get next row
var row = [ new Date() ]; // first element in the row should always be a timestamp
// loop through the header columns
for (var i = 1; i < headers.length; i++) { // start at 1 to avoid Timestamp column
if(headers[i].length > 0) {
row.push(e.parameter[headers[i]]); // add data to row
}
}
// more efficient to set values as [][] array than individually
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
}
catch(error) {
Logger.log(e);
}
finally {
return;
}
Wie greife ich auf die spezifische e.parameter
(form-type
), die ich brauche, um in der Lage sein zu erkennen, welche Form verwendet wurde, und führen Sie es entsprechend?
Für weitere Informationen können Sie (https://github.com/dwyl/html-form-send-email-via-google-script-without-server „)
Warum sollten Sie es nicht anschauen, um zu sehen, wie es gebaut wird? Verwenden Sie 'Logger.log (JSON.Stringify (e))' –
AFAIK das Protokoll funktioniert nur, wenn das Skript in-Browser ausgeführt wird, nicht die Website, auf der es ausgeführt wird, so dass völlig nicht hilfreich – SamYoungNY