0

結果のリンクされたスプレッドシートを使用して、多肢選択式クイズ用のGoogleフォームを作成しました。これは非常にうまく機能します。私には特定の問題があります。それは、ユーザーの結果をユーザーに提示したいということです(つまり、ユーザーが正解/不正解した回答の数)。私がこれまでに取ったアプローチは次のとおりです。

  • 各回答の正解数を計算する数式を使用して、スプレッドシートに追加のシートを作成します。これにより、「フルネーム」と「スコア」の2つの列が表示されます
  • フォームをGoogleサイトに埋め込みます
  • Google Apps Scriptを作成して、結果シートを読み、出力を表示します
  • 上記をAppsScriptガジェットと同じフォームの下のサイトに埋め込みます

現在、これまでに記録されたすべての結果を表示することができます。ここを参照してください:

https://sites.google.com/site/mcqtest123/home

スクリプトは次のようになります。

// Script-as-app template.
function doGet() {
  var app = UiApp.createApplication();

  var title = app.createLabel("Survey Results").setStyleAttribute("fontSize","16px");
  app.add(title);

  //readRows(app);
  calculateScores(app);

  return app;
};

function calculateScores(app) {
  var sheet = SpreadsheetApp.openById("0AlNR-ou0QtandFFzX1JCU1VRdTl0NVBRNTFjOUFhd1E");
  var responseSheet = sheet.getSheetByName("Form Responses");
  var allData = responseSheet.getDataRange().getValues();

  var correct = allData[1];
  var responses = allData.slice(2);

  //Logger.log("Timestamp, name, score");
  Logger.log("Name, Score");
  for (var i = 0; i < responses.length; i++) {
    var timestamp = responses[i][0];
    var name = responses[i][1];
    var score = 0;
    for (var j = 2; j < correct.length; j++) {
      if(responses[i][j] == correct[j]) {
        score += 1;
      }
    }  
    //var output = timestamp + ", " + name + ", " + score + "/" + correct.length
    var output = name + ", " + score + "/" + correct.length
    print(app, output);
  }
};

function print(app, line) {
  Logger.log(line);
  app.add(app.createLabel(line));
};

したがって、これには2つの問題があります。

  1. ページが読み込まれると、すべての回答者のスコアが読み込まれます。フォームに記入した人のスコアのみを提示できるようにしたいと思います。

  2. フォームが入力されてもスコアは更新されません。ページが更新された場合のみです。

document.getElementById('targetFrame')問題1)については、iframe形式のデータにアクセスして(たとえば、Googleスクリプトがドキュメントモデルにアクセスできないように見えることを除いて)、フルネームの人の結果のみを表示する方法があるかどうか疑問に思いました。フォーム内の名前と一致します(もちろん、他の人がフルネームとして何を入力するかがわかっている場合は、他の人の結果を表示できますが、タイムスタンプを使用しないと、この周りに表示されません)。

問題2)については、回答シートが更新されたときにスクリプトをトリガーする方法があるのではないかと思いました。ただし、スプレッドシートと[ツール]-> [スクリプトマネージャー]に移動すると、「スクリプトが見つかりません」というメッセージが表示されるため、このトリガーを追加する方法がわかりません。

4

1 に答える 1

2

HtmlService または UiApp を使用して独自のフォームを作成し、それをスクリプトに POST してスプレッドシートに入力する場合、非表示フィールドに UID を生成し、これを使用して、誰かが表示する必要がある結果を判断できます。

これは、クイズへの回答に対するインスタント フィードバックとしての結果になります。これらを後日表示するには、その UID をパラメータとして含むブックマーク可能なリンクを追加することもできます。したがって、 doGet() はたとえばを探しますe.parameters.uid

現状のGoogleフォームからは、よくわかりません。新しいフォーム スタイルを使用して、事前に入力されたフィールドにそのような UID を提供できる可能性がありますが、フォームの送信から Web アプリケーションへのルートは再び不明確です。

于 2013-02-07T15:25:38.570 に答える