目的
- 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 で自動書き込みの機能を実装してみましたが、ここからスタートしてどんどんうまくなっていきたいです。もっとこうやったほうがいい箇所とかありましたら、教えていただきたいです。