Google 스프레드 시트의 데이터를 사용하여 Google 양식을 '미리 채울'수 있습니까?
Google 스프레드 시트의 특정 데이터로 Google 양식을 '미리 채우는'방법을 찾고 있습니다. 양식에는 모든 사람에게 동일한 '표준'질문이 있지만 처음 두 질문의 데이터는 기존 Google 스프레드 시트의 고유 한 데이터로 '미리 채워집니다'. 데이터는 기존 스프레드 시트의 이메일 주소를 기반으로 고유합니다.
소스 스프레드 시트 예
Col 1 Col 2 Col 3
email name birthday
@mike Mike Jones May 9th 1975
@jim Jim Smith April 19th 1985
양식 예 1
질문 1- Google 스프레드 시트의 데이터 (Mike Jones) 가 미리 채워져 있습니다.
질문 2- Google 스프레드 시트의 데이터 (1975 년 5 월 9 일)로 미리 채워져 있습니다.
질문 3-비어 있음 (사용자 응답 대기 중)
질문 4-비어 있음 (사용자 응답 대기 중)
양식 예 2
질문 1- Google 스프레드 시트의 데이터 (Jim Smith)로 미리 채워져 있습니다.
질문 2- Google 스프레드 시트의 데이터 (1985 년 4 월 19 일)로 미리 채워져 있습니다.
질문 3-비어 있음 (사용자 응답 대기 중)
질문 4-비어 있음 (사용자 응답 대기 중)
이것이 할 수 있는지 아는 사람이 있습니까? 그렇다면, 어떤 도움이나 지시도 대단히 감사하겠습니다.
미리 감사드립니다!
토드
드라이브 양식 문서에 설명 된대로 양식 편집기 내에서 미리 채워진 양식 URL을 만들 수 있습니다 . 예를 들어 다음과 같은 URL로 끝납니다.
https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899
buildUrls ()
이 예에서 질문 1 "Name"은 ID가 726721210
이고 질문 2 "Birthday"는 787184751
입니다. 질문 3과 4는 비어 있습니다.
다음과 같이 UI를 통해 제공된 URL을 템플릿으로 조정하여 미리 채워진 URL을 생성 할 수 있습니다.
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.
}
};
이것은 충분히 효과적입니다. 미리 채워진 URL을 각 사람에게 이메일로 보낼 수 있으며, 그들은 이미 몇 가지 질문이 채워져있을 것입니다.
betterBuildUrls ()
무차별 대입을 사용하여 템플릿을 만드는 대신 프로그래밍 방식으로 함께 조합 할 수 있습니다. 이는 템플릿 변경을 기억할 필요없이 코드를 재사용 할 수 있다는 장점이 있습니다.
양식의 각 질문은 항목입니다. 이 예에서는 설명한대로 양식에 4 개의 질문 만 있다고 가정합니다. 항목 [0]
은 "이름", [1]
"생일"등입니다.
제출하지 않을 양식 응답을 생성 할 수 있습니다. 대신 미리 채워진 양식 URL을 얻기 위해서만 양식을 부분적으로 완성합니다. Forms API는 각 항목의 데이터 유형을 이해하므로 날짜 및 기타 유형의 문자열 형식을 조작하지 않아도되므로 코드가 다소 단순화됩니다.
( 편집 : 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.
}
};
yymmdd 함수
미리 채워진 양식 URL의 모든 날짜 항목은 다음 형식이어야합니다 yyyy-mm-dd
.. 이 도우미 함수는 변환을 처리하는 새 메서드로 Date 개체를 확장합니다.
When reading dates from a spreadsheet, you'll end up with a javascript Date object, as long as the format of the data is recognizable as a date. (Your example is not recognizable, so instead of May 9th 1975
you could use 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]);
};
'programing' 카테고리의 다른 글
ID로 수백만 개의 행을 삭제하는 가장 좋은 방법 (0) | 2020.11.28 |
---|---|
Symfony 2 및 Twig에 CSS 파일을 포함하는 방법은 무엇입니까? (0) | 2020.11.28 |
git은 내 .sql 파일이 바이너리 파일이라고 생각하는 이유는 무엇입니까? (0) | 2020.11.28 |
최신 브라우저에서 파일을 업로드하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.28 |
Angular 2 구성 요소 속성의 기본값을 설정하는 방법은 무엇입니까? (0) | 2020.11.28 |