1

퀴즈로 바뀐 Google 양식에서 이메일과 총점을 모두 검색하려면 Google 스크립트 (GAS)가 필요합니다.Google 양식에서 평균 점수와 이메일을 얻는 스크립트 (퀴즈)

GAS 내에서 각 질문의 점수를 얻을 수 있지만 모든 질문의 점수를 얻은 다음 최종 점수를 평균해야합니다 (각 퀴즈에는 20 개의 질문이 있습니다). 퀴즈를 마친 각자의 이메일도 필요합니다. 이 퀴즈는 기관 내에서 이루어 지므로 "이메일 주소 수집"이 선택됩니다.

내가 퀴즈를 수백 개 만들 것이며 하나의 스프레드 시트에 모든 성적을 요약해야하므로 "응답 스프레드 시트"가 아니고 필요합니다. 수백 개의 응답 스프레드 시트를 갖고 싶지 않습니다.

내가 지금까지 가지고있는 것은 각 퀴즈의 평균 점수를 얻은 다음 스프레드 시트의 이메일 옆에 넣을 수는없는 것 같습니다. 어떤 도움을 주시면 감사하겠습니다.

function getPoints() { 
var form = FormApp.openById('ID'); 
var formResponses = form.getResponses(); 
var formItems = form.getItems(); 

for (var i = 0; i < formResponses.length; i++) { 
    var formResponse = formResponses[i]; 
    var email = formResponse.getRespondentEmail(); 

/* I need to get all emails from those who responded, 
    not just one and put them in column A.*/ 

    var s = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
    var sr = s.getRange("A:A").setValues(email); 
} 

for (var j = 0; j < formItems.length; j++) { 
    var item = formItems[i]; 
    if (item.getType() === item.getType().TEXT){ 
    var points = item.asTextItem().getPoints(); 
    var itemResponse = formResponse.getGradableResponseForItem(item); 
    var answer = itemResponse.getResponse(); 
    var sc = itemResponse.getScore(); 

    /* I need to get all the scores, not just one, and then average 
     them, and them put them in column B, beside the corresponding 
     email in column A. */ 

    var s = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
    var sr = s.getRange("B:B").setValues(sc); 
    } 
} 
} 
+0

확실하지 않음 . 그러나 양식을 모두 같은 스프레드 시트로 지정할 수 있습니다. https://support.google.com/docs/answer/2917686?hl=ko –

답변

1

스크립트가 매우 가까이 있습니다.

모든 항목 점수를 한꺼번에 가져 오는 방법이 없으므로 한 가지 대안은 항목 점수 배열을 작성한 다음 각 퀴즈 (제출 된 응답)의 평균을 계산하는 것입니다.

가 제한된 스크립트로 사용하기위한 다음의 스크립트는, 세 가지 기능을 포함한다 : 실시 예

  • 으로 onOpen 맞춤 메뉴
  • showAvarage 주요 기능을 추가하도록 처리 할 양식을 설정하고 2D 배열을 만드는 함수를 호출합니다. 스프레드 시트에 값을 전송하는 데 사용할 수는 있지만 간단히하기 위해 생략되었습니다.
  • calculateAvarage는 응답자의 이메일을 수집하고 각 퀴즈의 평균 점수를 계산합니다 (응답 제출)
function onOpen(e) { 
    var ui = FormApp.getUi(); 
    var menu = ui.createMenu('My Menu') 
    .addItem('Average', 'showAverage') 
    .addToUi(); 
} 

function showAverage(){ 
    // Works for bounded scripts called from custom menus or the script editor 
    var form = FormApp.getActiveForm(); 

    Logger.log(calculateAverage(form)); 
} 

/** 
* Calculate the average score for each submitted response 
* 
* @param {Object} form  The form to be processed. 
* @return {Array}   2D array. First column respondent email, 
*        second column response average. 
*/ 
function calculateAverage(form){ 

    var formResponses = form.getResponses(); 

    // If there aren't submitted responses, exit. 
    if(formResponses.length == 0) return 'No responses'; 

    // Initialize output 
    var output = []; 

    for(var i = 0; i < formResponses.length ; i++){ 
    var itemResponses = formResponses[i].getGradableItemResponses(); 

    // Initialize scores array. Later it will be used to calculate the score average. 
    var scores = []; 
    for(var j = 0; j < itemResponses.length; j++){ 
     var score = itemResponses[j].getScore(); 
     scores.push(score); 
    } 

    // Average calculation. Reference https://stackoverflow.com/a/10624256/1595451 
    var sum = scores.reduce(function(a, b) { return a + b; }); 
    var avg = sum/scores.length; 

    // Add row 
    var email = formResponses[i].getRespondentEmail(); 
    output.push([email,avg]); 
    } 

    return output; 
} 

참조

관련 문제