Czy możliwe jest "wstępne wypełnienie" formularza google za pomocą danych z arkusza kalkulacyjnego google?
Szukam sposobu na "wstępne wypełnienie" formularza google konkretnymi danymi z arkusza kalkulacyjnego google. Formularz będzie miał te same "standardowe" pytania dla wszystkich, ale dane w dwóch pierwszych pytaniach będą "wstępnie wypełnione" unikalnymi danymi z istniejącego arkusza kalkulacyjnego google. Dane będą unikalne na podstawie ich adresu e-mail w istniejącym arkuszu kalkulacyjnym.
PRZYKŁAD ARKUSZA KALKULACYJNEGO
Col 1 Col 2 Col 3
email name birthday
@mike Mike Jones May 9th 1975
@jim Jim Smith April 19th 1985
FORMULARZ PRZYKŁAD PIERWSZY
Pytanie 1-wstępnie wypełnione danymi (Mike Jones) z arkusza kalkulacyjnego google.
Pytanie 2-wypełnione danymi (9 maja 1975) z arkusza kalkulacyjnego google.
Pytanie 3-puste (oczekujące na odpowiedź użytkownika)
Pytanie 4-puste (oczekujące na odpowiedź użytkownika)
FORMULARZ PRZYKŁAD DRUGI
Pytanie 1-wypełnione danymi (Jim Smith) z arkusza kalkulacyjnego google.
Pytanie 2-wypełnione danymi (19 kwietnia 1985) z arkusza kalkulacyjnego google.
Pytanie 3-puste (oczekujące na odpowiedź użytkownika)
Pytanie 4-puste (oczekujące na odpowiedź użytkownika)
Czy ktoś wie, czy da się to zrobić? Jeśli tak, każda pomoc lub kierunek będą bardzo mile widziane. Z góry dziękuję!
Todd
1 answers
Możesz utworzyć wstępnie wypełniony adres URL formularza z poziomu edytora formularzy, zgodnie z opisem w dokumentacji dla formularzy napędu. Będziesz miał taki adres URL, na przykład:
https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899
BuildUrls ()
W tym przykładzie pytanie 1," imię", ma ID 726721210
, podczas gdy pytanie 2, "urodziny" to 787184751
. Pytania 3 i 4 są puste.
Możesz wygenerować wstępnie wypełniony adres URL, dostosowując ten dostarczony przez interfejs do szablonu, jak to:
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"); // Email, Name, Birthday
var data = ss.getDataRange().getValues();
// Skip headers, then build URLs for each row in Sheet1.
for (var i = 1; i < data.length; i++ ) {
var url = template.replace('##Name##',escape(data[i][1]))
.replace('##Birthday##',data[i][2].yyyymmdd()); // see yyyymmdd below
Logger.log(url); // You could do something more useful here.
}
};
Jest to wystarczająco skuteczne - możesz wysłać wstępnie wypełniony adres URL każdej osobie, a ona będzie miała już wypełnione pytania.
BetterBuildUrls ()
Zamiast tworzyć nasz szablon za pomocą brute force, możemy go poskładać programowo. Będzie to miało tę zaletę, że możemy ponownie użyć kodu bez konieczności pamiętania o zmianie szablonu.
Każde pytanie w formularzu jest przedmiotem. Dla tego przykładu przyjmijmy, że postać ma tylko 4 pytania, jak je opisałeś. Pozycja [0]
to "imię", [1]
to "urodziny" i tak dalej.
Możemy utworzyć odpowiedź formularza, której nie będziemy przesyłać - zamiast tego częściowo wypełnimy Formularz, tylko po to, aby uzyskać wstępnie wypełniony adres URL formularza. Ponieważ API formularzy rozumie typy danych każdego elementu, możemy uniknąć manipulowania formatem łańcuchów dat i innych typów, co nieco upraszcza nasz kod.
(EDIT: {[33] }jest bardziej ogólna wersja tego w Jak aby wypełnić wstępnie pola wyboru formularza Google?)
/**
* Use Form API to generate pre-filled form URLs
*/
function betterBuildUrls() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Sheet1");
var data = ss.getDataRange().getValues(); // Data for pre-fill
var formUrl = ss.getFormUrl(); // Use form attached to sheet
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
// Skip headers, then build URLs for each row in Sheet1.
for (var i = 1; i < data.length; i++ ) {
// Create a form response object, and prefill it
var formResponse = form.createResponse();
// Prefill Name
var formItem = items[0].asTextItem();
var response = formItem.createResponse(data[i][1]);
formResponse.withItemResponse(response);
// Prefill Birthday
formItem = items[1].asDateItem();
response = formItem.createResponse(data[i][2]);
formResponse.withItemResponse(response);
// Get prefilled form URL
var url = formResponse.toPrefilledUrl();
Logger.log(url); // You could do something more useful here.
}
};
Funkcja Yymmdd
Każda pozycja daty w wstępnie wypełnionym adresie URL formularza powinna mieć taki format: yyyy-mm-dd
. Ta funkcja pomocnicza rozszerza obiekt Date o nową metodę obsługi konwersji.
Podczas odczytywania dat z arkusza kalkulacyjnego zostanie wyświetlony obiekt daty javascript, o ile format danych będzie rozpoznawalny jako data. (Twój przykład nie jest rozpoznawalny, więc zamiast May 9th 1975
możesz użyć 5/9/1975
.)
// From http://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:58