簡體   English   中英

在谷歌表單上自動生成多項選擇測驗

[英]Automatically generating multiple choice quizzes on google forms

我是一名教師,需要創造大量的選擇題測驗像這樣我的學生。

您會看到每個多項選擇題都具有完全相同的格式 - 一個問題要上傳為圖片,然后是 4 個多項選擇選項 - A、B、C 和 D。

我的問題是,有沒有辦法自動化這個過程?

每批問題都在 googledrive 文件夾中,並命名為“1.png”、“2.png”、“3.png”等 - 這些將作為圖片上傳到 google 表單上。

在一個單獨的文件夾中,我有一個 googlesheet 列出了每個問題的所有答案,它看起來像這樣

所以與電子表格中的答案(字母)匹配的數字對應於圖像文件(例如,上面電子表格的第一行顯示問題1.png的答案是A)

在一個單獨的文件夾中,我有另一個 googlesheet,其中包含對不正確和正確答案的反饋,如下所示 並非所有問題都有反饋。

無論如何,是否可以從這些 googlesheets 和 png 文件中自動生成測驗?

感謝您花時間閱讀所有這些,如果您能提出解決方案,我將特別感謝?

這是一個想要從題庫中隨機選擇給定數量的問題的提問者的解決方案。 這不使用谷歌表單,而是使用 html 表單。

這是代碼(歡迎您對其進行修改):我對代碼有一些疑問並更正了問題,然后進入並更新了代碼。 它更有條理,更容易遵循......我希望。

代碼.gs:

function onOpen() {
    SpreadsheetApp.getUi().createMenu('Questions Menu')
      .addItem('Questions', 'launchQuestionsDialog')
      .addToUi();
}

問題.gs

function getQuestions() {
  var ss=SpreadsheetApp.getActive();
  var cpData=getCpData();
  var qnum=cpData.qNum;
  var qa=getQAndA();
  var qi=getAnswerIndexes();
  var html='';
  var clr=['#f6d1ac','#c5e9bd'];
  for(var i=0;i<qa.length;i++) {
    html+=Utilities.formatString('<div id=d%s style="font-weight:bold;background-color:%s;padding:5px;"><span id="q%s">%s</span><input type="hidden" value="%s" class="hiding" />',qa[i][0],clr[i % 2],qa[i][0],qa[i][1],qa[i][0]);
    html+=Utilities.formatString('<input type="hidden" value="%s" class="hiding" />',qa[i][0]);
    for(var j=qi.firstIdx;j<=qi.lastIdx;j++) {
      if(qa[i][j]) {
        html+=Utilities.formatString('<br /><input type="radio" name="n%s" value="%s" />%s',qa[i][0],qa[i][j],qa[i][j]);
      }
    }
    html+='</div>'  
  }
  html+='<div id="controls"><br /><input type="button" value="Submit" onClick="recordData();" /></div>';
  return {html:html}
}

function launchQuestionsDialog() {
  var userInterface=HtmlService.createHtmlOutputFromFile('questions').setWidth(800).setHeight(500);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "The new Questions");
}

function selectTest() {
  var qA=selectQuestions(5,24);
  Logger.log(qA);
}

function selectQuestionIndexes(n,m) {
  var set=[];
  do {
    var i=Math.floor(Math.random()*(m));
    if(set.indexOf(i)==-1) {
      set.push(i);
    }
  }while(set.length<n);
  return set;
}

function getCpData() {
  var ss=SpreadsheetApp.getActive();
  var cpSh=ss.getSheetByName('ControlPanel');
  var cpRg=cpSh.getDataRange();
  var cpVa=cpRg.getValues();
  var qsrcSh=ss.getSheetByName(cpVa[1][0]);
  var adesSh=ss.getSheetByName(cpVa[1][1]);
  var qnum=cpVa[1][2];
  var cpData={'qSrc':cpVa[1][0],'aDes':cpVa[1][1],'qNum':cpVa[1][2]};
  return cpData;
}

function getAnswerIndexes() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(getCpData().qSrc);
  var rg=sh.getRange(1,1,1,sh.getLastColumn());
  var vA=rg.getValues();
  var re=/Answer \d{1,2}/i;
  var fidx=0;
  var lidx=0;
  var first=true;
  vA[0].forEach(function(e,i){if(String(vA[0][i]).match(re))if(first){fidx=i;first=false;}else{lidx=i;}});
  return {'firstIdx':fidx,'lastIdx':lidx};
}

function recordData(responses) {
  if(responses) {
    var ss=SpreadsheetApp.getActive();
    var sheetname=getCpData().aDes;
    var sh=ss.getSheetByName(sheetname);
    var ts=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss"); 
    responses.forEach(function(e,i){e.splice(0,0,ts);sh.appendRow(e)});
  }
  return true;
}

function doGet() {
  return HtmlService.createHtmlOutputFromFile('questions');
}

function getQAndA() {
  var qa=[];
  var cma=',';
  var ss=SpreadsheetApp.getActive();
  var cpData=getCpData();
  var qsrcSh=ss.getSheetByName(cpData.qSrc);
  var qsrcRg=qsrcSh.getRange(2,1,qsrcSh.getLastRow()-1,qsrcSh.getLastColumn());
  var qsrcVa=qsrcRg.getValues();
  var qs=selectQuestionIndexes(cpData.qNum,qsrcVa.length);
  var aIdxs=getAnswerIndexes();
  for(var i=0;i<qsrcVa.length;i++) {
    var qas='';
    if(qs.indexOf(i)>-1) {
      qas+=qsrcVa[i][0] + cma + qsrcVa[i][1];
      for(j=aIdxs.firstIdx;j<=aIdxs.lastIdx;j++) {
        if(qsrcVa[i][j]) {
            qas+= cma + qsrcVa[i][j];
        }
      }
      qa.push(qas.split(cma));
    }
  }
  return qa;
}

問題.html:

<!DOCTYPE html>
<html>
<head>
 <!--<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>-->
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
    $(function() {
        google.script.run
        .withSuccessHandler(function(hObj){
          $('#container').html(hObj.html);
        })
        .getQuestions();
      });
    function recordData() {
      var responses=[];
      var cm=',';
      var divs = document.getElementsByTagName("div");
      for(var i=0;i<divs.length;i++) {
        var id=divs[i].getAttribute(['id']);
        var qnum=$('div#' + id + ' ' + 'input.hiding').val();
        //var question=document.getElementById(id).innerHTML;
        var question=$('#q' + qnum ).text(); 
        var answer=$('input[name="n' + qnum + '"]:checked').val();
        if(id!='controls') {
          if(!answer) {
            window.alert('You did not answer question number ' + Number(i+1) + '. It is a requirement of this survey that all questions must be answered.' );
            return;
          }else {
            var end='is near';
            var s=qnum + cm + question + cm + answer;
            responses.push(s.split(cm));
          }
        }
      }

      google.script.run
      .withSuccessHandler(displayThanks)
      .recordData(responses);
    }
    function displayThanks() {
      var divs = document.getElementsByTagName("div");
      for(var i=0;i<divs.length;i++) {
        divs[i].style.cssText="display:none;text-align:center";
      }
      var elemDiv = document.createElement('div');
      elemDiv.innerHTML="<br /><h1>Thank You For Your Participation in This Survey</h1>";
      document.body.appendChild(elemDiv);
    }
    console.log('My Code');
    </script>
    <style>
    #reply{display:none;}
    #collect{display:block;}
    body  {
    background-image: url("http://myrabridgforth.com/wp-content/uploads/blue-sky-clouds.jpg");
    background-color: #ffffff;
    background-repeat: no-repeat;
    background-position: left bottom;
    }
    </style>
</head>  
  <body>
    <div id="container">
    </div>
  </body>
</html>

以下是電子表格上各個選項卡的樣子:

控制面板選項卡:

在此處輸入圖片說明

題庫選項卡:

在此處輸入圖片說明

測試 1 選項卡:

在此處輸入圖片說明

希望這對你有一定的價值。

其他所有東西都運行良好,但是您知道我為什么要通過Test1提交的答案來得到這些嗎?

在此處輸入圖片說明

為克服人口稠密地區超密集網絡中的問題,提出了建議。 超密集網絡在人口稠密地區保持恆定的連接性和數據速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM