7

チャンピオンシップのレース結果を更新する自動システムのようなものを構築したいと考えています。すべての結果が表示されている自動化されたスプレッドシートを持っていますが、すべてを更新するには時間がかかるため、より簡単に更新するためにフォームを作成できるかどうか疑問に思っていました.

フォームに、ドライバーの名前とレースで獲得したポイント数を入力します。チャンピオンシップには毎月 4 つのレースがあるので、私の質問は、フォームを使用して既存のデータ (スプレッドシートに保存されている) を更新する方法を知っているかどうかです。最初のレースで、ドライバー「X」が 10 ポイントを獲得したとします。このデータをフォームに挿入し、スプレッドシートから呼び出して表示します。そうです。問題は、第 2 レースの結果などを更新したい場合です。ドライバー「X」が第 2 レースで 12 ポイントを獲得した場合、そのドライバーの以前の 10 ポイントを更新して、代わりに 22 ポイントを入れる方法はありますか? または、最初のレース結果に 2 番目のレース結果を自動的に追加できますか? つまり、フォームに 2 番目のレース結果を挿入すると、ドライバー「X」を探すことができますか? エントリを作成し、このポイントを以前に持っていたポイントに追加します。それが可能かどうかはわかりません。

多分私は別の方法でそれを行うことができます。どんな助けでも大歓迎です!ありがとう。

4

3 に答える 3

5

あなたの質問で何かを見逃したかもしれませんが、ハロルドの答えがよくわかりません...これは、あなたが求めたことを厳密に行うコードです。フォームに入力された4つの数値の合計累積値をカウントし、スプレッドシートに表示します.

4 つの質問を「レース番号 1」、「レース番号 2」と呼びました。結果は 2 行目に表示されるので、ヘッダーを設定できます。

回答をより自由に入力できるように、数字以外の文字を取り除きました。数字のみが保持されます。

フォームはこちらSS はこちら (シート 1 の生の結果とシート 2 のカウント)

スクリプトはスプレッドシートに入り、onFormSubmit トリガーによってトリガーされます。

function onFormSubmit(e) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  var responses = []
  responses[0] = Number(e.namedValues['race number 1'].toString().replace(/\D/g,''));
  responses[1] = Number(e.namedValues['race number 2'].toString().replace(/\D/g,''));
  responses[2] = Number(e.namedValues['race number 3'].toString().replace(/\D/g,''));
  responses[3] = Number(e.namedValues['race number 4'].toString().replace(/\D/g,''));
  var totals = sh.getRange(2,1,1,responses.length).getValues();
  for(var n in responses){
    totals[0][n]+=responses[n];
  }
  sh.getRange(2,1,1,responses.length).setValues(totals);
}

編集:回答数を簡単に変更できるようにコードを変更しました...範囲は自動的に更新されます。


EDIT 2 :結果に「if」条件を使用して空の応答を受け入れるバージョン:

function onFormSubmit(e) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  var responses = []
  responses[0] = Number((e.namedValues['race number 1']==null ? 0 :e.namedValues['race number 1']).toString().replace(/\D/g,''));
  responses[1] = Number((e.namedValues['race number 2']==null ? 0 :e.namedValues['race number 2']).toString().replace(/\D/g,''));
  responses[2] = Number((e.namedValues['race number 3']==null ? 0 :e.namedValues['race number 3']).toString().replace(/\D/g,''));
  responses[3] = Number((e.namedValues['race number 4']==null ? 0 :e.namedValues['race number 4']).toString().replace(/\D/g,''));
  var totals = sh.getRange(2,1,1,responses.length).getValues();
  for(var n in responses){
    totals[0][n]+=responses[n];
  }
  sh.getRange(2,1,1,responses.length).setValues(totals);
}
于 2014-02-14T20:36:46.150 に答える
5

私はあなたがここであなたが望むすべてを見つけることができると信じています.
これはフォームの URL です。このフォームに回答すると、データが保存されているスプレッドシートの URL が表示されます。保存されている情報の 1 つは、応答を変更するための URL です。リンクをたどると、フォームが再び開き、結果としてスプレッドシートが更新されます。このトリックを実行するコードは、スプレッドシートの 2 番目のシートにあります。
これは、フォーム内で関連付ける必要がある Google Apps スクリプト コードであり、onFormSubmit トリガーでトリガーされます。

于 2014-02-14T17:33:56.730 に答える