(この記事は、2020年に作成した記事を移設したものです。)
オンラインでクイズ大会を開く場合、従来のペーパークイズの代わりに、Google Formなどを用いてオンラインで解けるクイズを実施したいと考えることがあります。
しかし、そこには手間が生じます。
なぜなら、問題の管理は多くの場合Excelファイルで行っていることが多く、Wordに直に貼り付けることができるオフラインのペーパークイズとは違い、フォームに1つ1つ問題をコピペしなければなりません。これは非常に面倒くさいです。
よって、この作業をGAS(Google Apps Script)上で自動化しましたので、その方法について備忘録・情報共有的な意味を込めてブログに残しておきます。
使用方法
- 以下のコードの各種設定項目に数値を記入する
- 問題の並んでいるExcelをGoogle ドライブ上でSpread sheetに変換する
- [ツール] > [スクリプトエディター] を開いて、コードを貼り付けて実行する
コード
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 |
function myFunction() { // ペーパーラウンドのGoogle Formをスプレッドシートから作成する // ********** 各種設定事項 ********** // タイトル var Title = '第1R 100問4択ペーパークイズ'; // 問題数 var Questions = 100; // ページ数(問題数の約数にしてください) var Page = 10; // 問題が並んでいるシートの名前 var SheetName = '提出フォーマット'; // ここから、スプレッドシートの内容について // 問題文が並んでいる列を0-indexで取得(A列 -> 0, B列 -> 1, C列 -> 2, ... ) var QuestionTextIdx = 3; // 選択肢が並んでいる列を0-indexで取得 var ChoiceIdx1 = 5, ChoiceIdx2 = 6, ChoiceIdx3 = 7, ChoiceIdx4 = 8; // 答え(1, 2, 3, 4のいずれか)が並んでいる列を0-indexで取得 var AnswerIdx = 9; // 1問目が記入されている行を0-indexで取得(1行 -> 0, 2行 -> 1, 3行 -> 2, ... ) var QuestionStartIdx = 3; // ********** 各種設定事項 終わり ********** var form = FormApp.create(Title); // スプレッドシートの選択 const ss = SpreadsheetApp.getActiveSpreadsheet(); const values = ss.getSheetByName(SheetName).getDataRange().getValues(); // テスト形式に設定 form.setIsQuiz(true); form.setProgressBar(true); // ********** ここから 問題文の設定 ********** var M = Questions / Page; for(var i=0;i<Page;i++){ // このページのタイトル var start = i * M + 1, end = (i + 1) * M; var PageTitle = 'Q' + String(start) + ' ~ Q' + String(end); form.addPageBreakItem().setTitle(PageTitle); for(var j=0;j<M;j++){ // 今何問目? var Idx = i * 10 + j; var item = form.addMultipleChoiceItem(); // 問題文 var QuestionStatement = 'Q' + String(Idx + 1) + '. ' + values[Idx+QuestionStartIdx][QuestionTextIdx]; item.setTitle(QuestionStatement); // 正解 var answer = values[Idx+QuestionStartIdx][AnswerIdx]; // 正解選択肢の設定 var flags = [false, false, false, false]; flags[answer - 1] = true; item.setChoices([ item.createChoice('[A]. ' + values[Idx+QuestionStartIdx][ChoiceIdx1], flags[0]), item.createChoice('[B]. ' + values[Idx+QuestionStartIdx][ChoiceIdx2], flags[1]), item.createChoice('[C]. ' + values[Idx+QuestionStartIdx][ChoiceIdx3], flags[2]), item.createChoice('[D]. ' + values[Idx+QuestionStartIdx][ChoiceIdx4], flags[3]) ]); item.setPoints(1); } } form.addPageBreakItem(); } |
参考資料
Document Service | Apps Script | Google for Developers
コメント