フォーム – フォームを使用してGoogleスプレッドシートの既存のデータを更新する

私は優勝のためにいくつかのレース結果を更新するために一種の自動システムを構築したいです。すべての結果が表示された自動スプレッドシートを持っていますが、それらすべてを更新するには非常に時間がかかるので、それらをより簡単に更新するためにフォームを作成することが可能かどうか疑問に思いました。

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

たぶん私は別の方法でそれをすることができます。任意の助けは大歓迎です!
ありがとう。

ベストアンサー
多分私はあなたの質問で何かを逃したが、私は本当にハロルドの答えを理解していない…
これは、あなたが要求したことを厳密に行うコードです。フォームに入力された4つの数字の合計累積値を数え、それをスプレッドシートに表示します。

私は4つの質問を “race number 1″、 “race number 2″と呼びました…そして結果は2行目に来るので、あなたはヘッダを設定することができます。

数字以外の文字は削除したので、回答をより自由に入力できます。数字だけが保持されます。

form hereSS here(シート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);
}

編集:私はあなたが簡単に応答の数を変更できるようにコードを変更しました…範囲は自動的に更新されます。

編集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);
}

転載記事の出典を記入してください: フォーム – フォームを使用してGoogleスプレッドシートの既存のデータを更新する - コードログ