Sie können im Formulareditor eine vorab ausgefüllte Formular-URL erstellen, wie in der Dokumentation zu Drive Forms beschrieben . Am Ende erhalten Sie eine URL wie diese, zum Beispiel:
https:
buildUrls ()
In diesem Beispiel hat Frage 1, "Name", die ID 726721210
, während Frage 2, "Geburtstag", lautet 787184751
. Die Fragen 3 und 4 sind leer.
Sie können die vorab ausgefüllte URL generieren, indem Sie die über die Benutzeroberfläche bereitgestellte URL wie folgt an eine Vorlage anpassen:
function buildUrls() {
var template = "https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=##Name##&entry.787184751=##Birthday##&entry.1381372492&entry.960923899";
var ss = SpreadsheetApp.getActive().getSheetByName("Sheet1");
var data = ss.getDataRange().getValues();
for (var i = 1; i < data.length; i++ ) {
var url = template.replace('##Name##',escape(data[i][1]))
.replace('##Birthday##',data[i][2].yyyymmdd());
Logger.log(url);
}
};
Dies ist effektiv genug - Sie können die vorab ausgefüllte URL per E-Mail an jede Person senden, und sie hat bereits einige Fragen ausgefüllt.
betterBuildUrls ()
Anstatt unsere Vorlage mit Brute Force zu erstellen, können wir sie programmgesteuert zusammensetzen. Dies hat den Vorteil, dass wir den Code wiederverwenden können, ohne daran denken zu müssen, die Vorlage zu ändern.
Jede Frage in einem Formular ist ein Element. In diesem Beispiel nehmen wir an, dass das Formular nur 4 Fragen enthält, wie Sie sie beschrieben haben. Artikel [0]
ist "Name", [1]
ist "Geburtstag" und so weiter.
Wir können eine Formularantwort erstellen, die wir nicht senden. Stattdessen füllen wir das Formular teilweise aus, um die vorab ausgefüllte Formular-URL zu erhalten. Da die Formular-API die Datentypen der einzelnen Elemente versteht, können wir vermeiden, das Zeichenfolgenformat von Datumsangaben und anderen Typen zu ändern, was unseren Code etwas vereinfacht.
( BEARBEITEN: Eine allgemeinere Version davon finden Sie unter So füllen Sie Kontrollkästchen für Google-Formulare aus. )
function betterBuildUrls() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Sheet1");
var data = ss.getDataRange().getValues();
var formUrl = ss.getFormUrl();
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
for (var i = 1; i < data.length; i++ ) {
var formResponse = form.createResponse();
var formItem = items[0].asTextItem();
var response = formItem.createResponse(data[i][1]);
formResponse.withItemResponse(response);
formItem = items[1].asDateItem();
response = formItem.createResponse(data[i][2]);
formResponse.withItemResponse(response);
var url = formResponse.toPrefilledUrl();
Logger.log(url);
}
};
yymmdd Funktion
Es wird erwartet, dass alle Datumsangaben in der vorab ausgefüllten Formular-URL dieses Format haben : yyyy-mm-dd
. Diese Hilfsfunktion erweitert das Date-Objekt um eine neue Methode zur Abwicklung der Konvertierung.
Wenn Sie Daten aus einer Tabelle lesen, erhalten Sie ein Javascript-Datumsobjekt, sofern das Format der Daten als Datum erkennbar ist. (Ihr Beispiel ist nicht erkennbar, also May 9th 1975
könnten Sie es verwenden 5/9/1975
.)
Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString();
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};
ss.getFormUrl()
wenn Sie die "bessere" Funktion verwenden. Anstatt alle Daten zuRange.setValues()
indem Sie die andere Tabelle nach ID öffnen.