0

「フォーム送信時」イベントで起動するスクリプトで最大 40 の質問をする Google フォームがあります。

ほとんどの場合、すべての応答の配列を取得し、.length-1 を介して最新の応答を取得するこのコードを介して、現在送信されている応答を var formResponse に正常に参照できます。

var formResponses = form.getResponses();
var i = formResponses.length-1;
var formResponse = formResponses[i];

フォームが 25 件以上の応答を収集すると、処理の遅延が発生し、スクリプトが実行されますが、何らかの理由で応答がまだ .getRespones() 配列に追加されていないようです。その結果、古い応答に対してスクリプトが再度実行されます。フォームと結果を含むスプレッドシートを見に行くまでに、期待どおりに更新されていますが、イベントは誤った応答で既に発生しています...したがって、正しく参照しているか、問題があるかどうか疑問に思っていますGoogleフォーム側。この問題は、フォームからすべての回答を削除すると一時的に緩和されますが、回答数が約 25 に達すると再び発生します。

ご協力ありがとうございました!

4

1 に答える 1

1

どの Google Apps スクリプト トリガー関数でも、トリガーに渡されるイベント情報を使用することをお勧めします。これにより、タイミングの問題を完全に回避できます。トリガーには独自のプライベート コピーがあります

イベントについて を参照してください。

たとえば、フォームに添付されたスクリプトでは次のようになります。

function handleFormSubmission( event ) {
  var formResponse = event.response;
  ...
}

同様に、フォームの応答を受け取るスプレッドシートに添付されたスクリプトでは、次のようになります。

function handleFormSubmission( event ) {
  // Array with values in the same order as they appear in the Spreadsheet.
  var values = event.values; 

  // An object containing the question names and values from the form submission.
  var namedValues = event.namedValues;
  ...
}
于 2013-11-21T19:00:11.257 に答える