1

クイズに変換されたGoogleフォームから電子メールと合計スコアの両方を取得するには、Googleスクリプト(GAS)が必要です。Googleフォームから平均スコアとメールを受け取るスクリプト(クイズとして)

GAS内では、各質問のスコアを得ることができますが、すべての質問のスコアを取得し、最終的なスコアを平均化する必要があります(各クイズは20問あります)。私はまた、クイズを終えた各人の電子メールが必要です。これらのクイズは機関内で行われ、「電子メールアドレスの収集」が選択されます。

私は何百ものクイズを作っており、すべての成績を1つのスプレッドシートに要約として入れる必要があるので、これは「レスポンススプレッドシート」ではなく必要です。私は何百もの応答スプレッドシートを持ちたくはありません。

私は今のところ以下のとおりですが、各クイズの平均得点をスプレッドシートの電子メールの横に表示しているようです。どんな助けもありがとう。

function getPoints() { 
var form = FormApp.openById('ID'); 
var formResponses = form.getResponses(); 
var formItems = form.getItems(); 

for (var i = 0; i < formResponses.length; i++) { 
    var formResponse = formResponses[i]; 
    var email = formResponse.getRespondentEmail(); 

/* I need to get all emails from those who responded, 
    not just one and put them in column A.*/ 

    var s = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
    var sr = s.getRange("A:A").setValues(email); 
} 

for (var j = 0; j < formItems.length; j++) { 
    var item = formItems[i]; 
    if (item.getType() === item.getType().TEXT){ 
    var points = item.asTextItem().getPoints(); 
    var itemResponse = formResponse.getGradableResponseForItem(item); 
    var answer = itemResponse.getResponse(); 
    var sc = itemResponse.getScore(); 

    /* I need to get all the scores, not just one, and then average 
     them, and them put them in column B, beside the corresponding 
     email in column A. */ 

    var s = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
    var sr = s.getRange("B:B").setValues(sc); 
    } 
} 
} 
+0

わかりません。しかし、フォームをすべて同じスプレッドシートに向けることができます。 https://support.google.com/docs/answer/2917686?hl=ja –

答えて

1

あなたのスクリプトは非常に近いです。

一度にすべての項目スコアを取得する方法がないため、1つの方法は項目スコアの配列を作成し、各クイズの平均を計算することです(提出された応答)。

が有界スクリプトとして使用するためのもので次のスクリプトは、3つの機能を含む:実施例

  • 開く時カスタムメニュー
  • showAvarage主な機能を追加すること処理されるフォームを設定し、2D配列を作成する関数を呼び出します。値をスプレッドシートに送るのに使うことができますが、簡単にするために省略しました。
  • calculateAvarageは、回答者の電子メールを収集し、各クイズのための平均スコアを算出する(応答の提出)
function onOpen(e) { 
    var ui = FormApp.getUi(); 
    var menu = ui.createMenu('My Menu') 
    .addItem('Average', 'showAverage') 
    .addToUi(); 
} 

function showAverage(){ 
    // Works for bounded scripts called from custom menus or the script editor 
    var form = FormApp.getActiveForm(); 

    Logger.log(calculateAverage(form)); 
} 

/** 
* Calculate the average score for each submitted response 
* 
* @param {Object} form  The form to be processed. 
* @return {Array}   2D array. First column respondent email, 
*        second column response average. 
*/ 
function calculateAverage(form){ 

    var formResponses = form.getResponses(); 

    // If there aren't submitted responses, exit. 
    if(formResponses.length == 0) return 'No responses'; 

    // Initialize output 
    var output = []; 

    for(var i = 0; i < formResponses.length ; i++){ 
    var itemResponses = formResponses[i].getGradableItemResponses(); 

    // Initialize scores array. Later it will be used to calculate the score average. 
    var scores = []; 
    for(var j = 0; j < itemResponses.length; j++){ 
     var score = itemResponses[j].getScore(); 
     scores.push(score); 
    } 

    // Average calculation. Reference https://stackoverflow.com/a/10624256/1595451 
    var sum = scores.reduce(function(a, b) { return a + b; }); 
    var avg = sum/scores.length; 

    // Add row 
    var email = formResponses[i].getRespondentEmail(); 
    output.push([email,avg]); 
    } 

    return output; 
} 

リファレンス

関連する問題