대학원 생활 꿀팁

[Apps script] Google Form 구글 설문지 코딩으로 만들기.

알 수 없는 사용자 2022. 10. 6. 23:27
반응형

오랜만의 포스팅입니다.

 

만들게 된 배경 

구글 설문지를 만들 일이 생겼다. 그런데 동일한 질문의 설문을 40개 가까이 만들어야 했다.

심지어 질문을 바꾸게 되면서 40개의 질문들을 하나하나 수정하자니.. 너무나도 답답하여..

 

만든 기능

코딩으로 구글 설문지를 만드는 방법을 소개한다!

무려 for문도 쓸 수 있고

변수도 선언해서 이것 저것 만질 수 있다.

심지어 본인의 경우 사진을 올린 뒤 더 좋은 사진을 고르는 설문이었기에 해당 사진들도 자동으로 넣어주는 코드를 짰다.

 

본격적인 설명을 시작해보자.

 

Step 1.

우선 모든 코딩은 Apps Script를 사용하였다.

22년 5월 쯔음부터인가 Google Docs API가 공개되었다.

= 코딩으로 해결 할 수 있다.

 

설문지를 만들고, 오른쪽 위의 땡땡땡을 눌러 스크립트 편집기를 연다.

이제 코딩을 할 준비가 되었다.

 

Step 2.

우선 설문에 들어갈 사진들을 폴더를 하나 만들어 둔 뒤 거기에 저장해두었다.

해당 사진들은 for문을 통해 가져와질 예정이다.

 

Step 3.

냅다 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function myFunction() {
  // Create a new form, then add a checkbox question, a multiple choice question,
  // a page break, then a date question and a grid of questions.
  var form = FormApp.create('Diffusion_already_user_study_final_final');
  // var form = FormApp.openById('EXIST FORM ID')
 
  var question_num = 1;
  var max_num = 41;
 
// ================================= Start!! =================================
 
  var main_decription = `[설문조사] DIFFUSION MODELS ALREADY HAVE A SEMANTIC LATENT SPACE
 
We plan to conduct the user study for the results of our research.
이어지는 설문내용들..
`
 
 
  form.setTitle('[User study] Diffusion model')
      .setDescription(main_decription)
      .setConfirmationMessage('시간을 들여 설문에 참여해 주셔서 감사합니다. Thanks for responding!')
 
 
// ================================= Smiling =================================
 
  var folder_id = '사진이 저장된 folder의 id'
 
  var break_first_description = `이어질 설문은...
중간에 들어갈 여러 설명들`
 
  var question_description = `중간에 들어갈 .`
 
  var question_1 = `어떤 이미지의 퀄리티가 더 좋다 생각되시나요? (노이즈가 적음, 선명함)
Which image quality do you think is better?  (less noise, clarity)`
  var question_2 = `어떤 이미지가 자연스럽게 웃고 있다 생각하시나요?
Which image do you think is "Smiling" naturally?`
  var question_3 = `두 기준을 종합했을 때 어떤 이미지가 더 낫다고 생각하시나요?
Which image do you think is better as considering above two evaluation criteria?`
  var question_4 = `어떤 이미지가 `
 
  var title_str = 'Smiling(웃음)'
  var image_title_str = '웃도록 만든 사진입니다.'
 
  form.addPageBreakItem()
    .setTitle(title_str)
    .setHelpText(break_first_description)
 
  // Smiling
  var files = DriveApp.getFolderById(folder_id).getFiles();
 
  while(files.hasNext()){
    file = files.next();
    var img = DriveApp.getFileById(file.getId())
    var prefix = '('+ question_num +'/'+ max_num +') ';
    
    form.addPageBreakItem()
    .setTitle(prefix+title_str)
    .setHelpText(question_description) //
 
    form.addImageItem()
    .setTitle(image_title_str)
    .setImage(img);
 
    var item = form.addMultipleChoiceItem();
    item.setTitle(prefix+question_1)
      .setChoices([
          item.createChoice('1'),
          item.createChoice('2')
      ])
      .setRequired(true)
    
    var item = form.addMultipleChoiceItem();
    item.setTitle(prefix+question_2)
      .setChoices([
          item.createChoice('1'),
          item.createChoice('2')
      ])
      .setRequired(true)
 
    var item = form.addMultipleChoiceItem();
    item.setTitle(prefix+question_3)
      .setChoices([
          item.createChoice('1'),
          item.createChoice('2')
      ])
      .setRequired(true)
 
    
    question_num = question_num + 1;
  }
 
Logger.log("Smiling done")
cs
 

 

 

설명을 해보겠다.

 

var form = FormApp.create('Diffusion_already_user_study_final_final');

이 부분은 새로 설문지를 만드는 부분이다.

만약 기존에 만들어진 설문지에 추가하고 싶다면 밑에 주석 쳐둔 코드를 사용하면 된다.

 

form.setTitle('[User study] Diffusion model')
      .setDescription(main_decription)
      .setConfirmationMessage('시간을 들여 설문에 참여해 주셔서 감사합니다. Thanks for responding!')
설문조사의 제목과 맨 위에 들어갈 설명, 그리고 설문이 끝났을 때 나올 문구를 설정한다.
  form.addPageBreakItem()
    .setTitle(title_str)
    .setHelpText(break_first_description)
설문조사에서 다음페이지로 넘어가는 부분이다. 페이지를 분리하고, 해당 페이지의 제목과 설명을 넣는다.
 
 

var files = DriveApp.getFolderById(folder_id).getFiles(); 

-> id를 가지고 폴더에 접근해서 해당 폴더 안에 있는 파일들을 가져온다. (이미지들이다.)
  while(files.hasNext()){
    file = files.next();
    var img = DriveApp.getFileById(file.getId())

-> while문을 돌면서 file의 아이디를 가지고 이미지를 가져온다. (그냥 파일 자체를 써도 될 것 같은데 왜 이렇게 코드를 짰을까? 모르겠다.)
 
var item = form.addMultipleChoiceItem();
    item.setTitle(prefix+question_1)
      .setChoices([
          item.createChoice('1'),
          item.createChoice('2')
      ])
      .setRequired(true)
 
여러개의 선택지가 있는 설문을 만들고, 제목은 괄호 안의 변수로, 선택지는 1과 2를 만든다.
+ 필수 선택항목으로 만들어 둔다.
 
 
 
이제 작성된 스크립트를 실행만 시키면 된다.

저기 있는 실행 버튼을 눌러 실행하면 코드가 돌면서 설문지가 만들어진다.

 

 
결과는...
 

 

이런 화면이 메인화면이고,

 

 

이런게 중간에 생기고,

 

 

이런 결과가 나온다.

 

동일한 질문을 반복문으로 넣었고,

문제번호는 코드로 넣어주었다.

 

 

자, 본인이 원하는 형태의 설문지가 분명 있을 것이다.

https://developers.google.com/apps-script/reference/forms

 

 

Forms Service  |  Apps Script  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Forms Service 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Forms 이 서비스를

developers.google.com

여기서 찾으면 된다.

잘 정리되어있고, 조금만 찾아보면 원하는 형태의 설문을 코딩을 통해 만들 수 있을 것이다.

 

모두가 노가다로부터 해방되길 바라며 짧은 글을 마친다.

반응형