• slider image 221
:::

4-9 使用csv 試題製作 google 測驗表單(單選)

程式修改自:題庫批次匯入google表單

 

一、取得試算表副本,並存放到自己的雲端空間。

(亂序版)檔案位置:https://docs.google.com/spreadsheets/d/17H9qGlBGif7IKfqRxJZXY8w5hBULLiiy40d_it6k5k8/edit?usp=sharing

2021/6/28 第一版

2021/6/29 增加亂序題份數可產多份不同順序的考卷(0表示依原題號順序)、答案亂序(0表示依原答案順序)

二、由內容中製作考試表單

修改參數及貼入 CSV 題目,修改測驗名稱、題數、每題分數、最多選擇數,並貼上你有題庫光碟中取得的 CVS 檔案內容,最後按下<製作測驗表單>鍵(第一次使用要取得授權,說明在下方)。

三、細部設定考試表單

在你的雲端硬碟中主目錄會產生一個和測驗名稱相同的檔案。

連點開啟,可以再修改題目內容等。

在右上方設定圖示,可以再設定是否一定要登入google 帳號、回答次數、是否出現正確答案及得分等。

 

 

提供授權

 

程式

function main() {
  //version 20210529
  //let url = 'google試算表網址';  //試算表網址
  var startRow = 7 ;
  let sheet = SpreadsheetApp.getActiveSheet();
  
  let isAllRequired = true;  //是否每題都要作答 true, false
  
  exam_name = sheet.getRange(1,2).getValue(); //測驗卷名稱
  let questionSize = sheet.getRange(2,2).getValue();  //匯入題目數
  let scores = sheet.getRange(3,2).getValue();  //每題配分
  let optionsSize = sheet.getRange(4,2).getValue(); //題目選項數, 4個表示2,3,4個選項都會計數到
  
   
  ///以下不用編輯///////////////////////////////////////////////////////////////////////
  let exam = {};
  //exam.url = url;
  exam.scores = scores;
  exam.size = questionSize;
  exam.rand_oder = sheet.getSheetValues(2, 4, 1, 1);    //題目順序隨機出幾份 0 表示按原順序。
  exam.rand_ans = sheet.getSheetValues(3, 4, 1, 1);     //答案順序是否要隨機 0 表示按原答案

  //取得試題
  let getSheet = function (exam) {
    let questions = [];

    exam.name = exam_name ;

    for (let i = 0; i < exam.size ; i++) {
      question = {};
      if (!sheet.getRange(startRow+i , 1).isBlank()) {
        //題目
        question.description = sheet.getSheetValues(startRow+i, 1, 1, 1);
        //正確答案
        question.answer = sheet.getSheetValues(startRow+i, 2, 1, 1);
        let index = 1;
        let options = [];

        let startColumn = 3
        //選項, 第三欄位到第七欄位,
        for (let j = startColumn; j < startColumn + optionsSize; j++) {
          if (!sheet.getRange( startRow+i, j).isBlank()) {
            let option = {};
            option.description = sheet.getSheetValues(startRow+i, j, 1, 1);
            option.value = parseInt(question.answer) === index ? true : false;
            options.push(option);
          }

          index += 1;
        }
        question.options = options;
        questions.push(question);
      }
    }
    exam.questions = questions;
    return exam;
  }

  //出考卷
  let doExam = function (exam , ran_num ) {
    exam.name_copy = exam.name ;
    if (ran_num > 0)
      exam.name_copy = exam.name  + "亂序_" + ran_num ; 

    let form = FormApp.create(exam.name_copy);
    form.setIsQuiz(true);

    let userinfo = form.addTextItem();
    userinfo.setTitle('請輸入您的班級座號,例如六甲一號:60101');
    userinfo.setRequired(true);

    let userName = form.addTextItem();
    userName.setTitle('請輸入您的姓名:');
    userName.setRequired(true);

    //題號順序改變
    if (ran_num > 0 )
      questions = shuffleArray(exam.questions);
    else 
      questions = exam.questions;

    for (let i = 0; i < questions.length; i++) {
      //選擇題
      let item = form.addMultipleChoiceItem();

      item.setPoints(exam.scores);
      item.setTitle(questions[i].description);

      
      //答案亂序
      if (exam.rand_ans > 0){
        options = shuffleArray(questions[i].options) ;
      }else {
        options = questions[i].options;
      }  


      let choices = [];
      for (let j = 0; j < options.length; j++) {
        choices.push(item.createChoice(options[j].description, options[j].value))
      }
      item.setChoices(choices);
      item.setRequired(isAllRequired);
 

    }

    Logger.log("done.");
  }

  //陣列亂數
  function shuffleArray(array) {
    var i, j, temp;
    for (i = array.length - 1; i > 0; i--) {
      j = Math.floor(Math.random() * (i + 1));
      temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
    return array;
  }


  exam = getSheet(exam)

  //亂序的份數
  for (ran_num = 0 ; ran_num <= exam.rand_oder ; ran_num ++)
  {
    doExam(exam , ran_num );
  }  

  Browser.msgBox( exam.name + " 制作完成!") ;
}


 


站內搜尋