LoginSignup
1
0
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

GAS でForm => Google Spreadsheet 入力を作ってみた

Last updated at Posted at 2024-01-20

目的

  • Form に入力した値をGASを使って、spreadsheet に入力したかった
  • spreadsheet に入力された内容をemailで送信 (これは後々の記事で書く)

前提

  • Google Form の質問項目

    • 名前
    • 電話番号
    • メールアドレス
    • 備考
  • A の列に関数を設定

B 列がBlank ではなかったら、数字を割り振る

    =IF(ISBLANK(B2),"",ROW()-1)

これをすることによって、GAS でid の割振りを敢えて避けてみました。
(正直どっちで実装した方が簡単なのかわからない)

実際のコード

// send form detail to spreadsheet
function submit(e) {

  // どのformかを指定
  const form = FormApp.openById("formID");
  
  //spreadsheetのIDを指定
  const sheet = SpreadsheetApp.openById("sheetID");

  //formAns の初期化
  formAns = [];

  //それぞれの回答を取得する変数
  const formResponses = form.getResponses(); 

  //記入するシートを用意
  const sht = sheet.getSheetByName('sheetの名前');

  // form 回答取得
  for (const formResponse of formResponses) {
          const itemResponses = formResponse.getItemResponses();
          for (const itemResponse of itemResponses) {
                  const response = itemResponse.getResponse()
                  formAns.push({response})
          }
  }

  // spreadsheet のlast のB range の列を取得する
  //A には関数を入れているので避けるために以下のような限定的な取得方法にしている
  lastsheet = sheet.getRange("B1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
  
  //変数定義し直し(配列の形にするため)
  const formAnswer = formAns;
  
  // response => value のvalue部分だけを取得
  const FormValue = formAnswer.map((response)=> response.response);
  
  //formの受け取ったデータをそれぞれシートに記入
  for (const FormValues of FormValue) {
          sht.getRange(lastsheet + 1, 2).setValue(FormValue[0]);
          sht.getRange(lastsheet + 1, 3).setValue(FormValue[1]);
          sht.getRange(lastsheet + 1, 4).setValue(FormValue[2]);
          sht.getRange(lastsheet + 1, 5).setValue(FormValue[3]);       
  }
}

まとめ

とりあえず初めてGAS で自動書き込みの機能を実装してみましたが、ここからスタートしてどんどんうまくなっていきたいです。もっとこうやったほうがいい箇所とかありましたら、教えていただきたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0