質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1054閲覧

スプレッドシートに入力することで自動でフォームテストができるようにしたい

2kidding

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/04/23 07:16

編集2020/04/23 13:44

今回オンライン授業化に伴い様々なサイトをわたり歩きながら自己流で組んできましたが完全に頓挫してしまいました。以下今回したいことです。

スプレッドシートに問題番号と解答を入力しておいて、
フォームテストの質問のところに問題番号
回答形式は5択(1.2.3.4.5)のラジオボタン
のテスト問題を作成したいと考えています。
フォームテストの問題は100問前後あり。それぞれ解答がついていて、
フォームに回答したら自動的に正誤がわかるようなテストを作成したいです。
回答は1回限りで設定したいと思います。

スプレッドシートにはA1にタイトルA2に概要A5~G241まで問題文と選択肢を記入しています。

function getTitle() {
return SpreadsheetApp.getActiveSheet().getRange("A1").getValue();
}

function getDescription() {
return SpreadsheetApp.getActiveSheet().getRange("A2").getValue();
}

function getQA(startRow, startCol) {

var sheet = SpreadsheetApp.getActiveSheet();

var rows = sheet.getLastRow();
var cols = sheet.getLastColumn();

return sheet.getRange(startRow, startCol, rows - startRow + 1, cols - startCol + 1).getValues();

}

function createForm(title, description, data) {

var form = FormApp.create(title);

form.setDescription(description);

for (var i = 0 ; i < data.length ; i++) {

var qa = data[i]; var item = form.addMultipleChoiceItem(); item.setTitle(qa[0]); var choices = []; for (var j = 1 ; j < qa.length ; j++) { choices.push(item.createChoice(qa[j])); } item.setChoices(choices);

}

return form;
}

function run() {

var form = createForm(getTitle(), getDescription(), getQA(5,1));

Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());

}

function test() {
Logger.log(getQA(5,1));
}

全て必須問題で各1点で回答もつけたいのですが、回答をどう範囲選択すればよいのかいまいちわかりません。
どのようなところを参考にすれればよいでしょうか?
フォームテストの内容について書かれているサイトや文献、アドバイス等ありましたら教えて下さい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sawa

2020/04/23 12:16

コード上は form.addCheckboxItem(); なのに、「この状態でラジオボタンの問題を作成することには成功」って変じゃないですか??
2kidding

2020/04/23 13:31

すみませんその部分を変更する前のものを貼り付けてしまいました
papinianus

2020/04/26 15:28

分からない箇所が分かりません。 あと、問題の書いてあるシートのデータ例を開示してください。コピペできる形式で。
guest

回答1

0

ベストアンサー

今の質問の状態でできる回答は、ドキュメントを見てください、しかないです。

解決しないし、コメントもないので、妄想で補足。

  • form をテストにする
  • 必須にし、1 点とする
  • 5択で B-G列があるということは、 G 列は正解を表現するデータではないかと推測し、B-Fのうち G と同じものは正解とマーク

の対応を行いました。

javascript

1const q255852 = () => { 2 const vals = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 3 const title = vals[0][0]; 4 const description = vals[1][0]; 5 const quizDat = vals.slice(4); 6 const form = createQuizForm(title,description); 7 quizDat.forEach(([n,...c])=> { 8 const t = c.slice(-1); 9 const item = form.addMultipleChoiceItem().setTitle(n).setRequired(true).setPoints(1); 10 const choices = c.slice(0,-1).map(e=>e===t?item.createChoice(e,true):item.createChoice(e,false)); 11 item.setChoices(choices); 12 }) 13} 14const createQuizForm = (title,description) => FormApp.create(title).setDescription(description).setIsQuiz(true);

これだと 236 問作られるので、quizDat をシャッフルして先頭100個をとれば100点の問題が作れると思います。

投稿2020/04/26 15:30

編集2020/04/27 14:14
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問