プロが書く美しいコードじゃない、素人の稚拙なコードだからこそ、得られるものだってきっとある…そんな思いでコードを公開しています。どうぞ生暖かく見守ってください。

[Google Apps Script]スプレッドシートにフォームから取得した質問項目を入力する

[tool1]フォームをシートに書き出しGoogle Apps Script
  • スプレッドシートに文字を入力(appendRow)
  • シートの内容を消去する(clear)

前回までで、Googleフォームから情報を取り出してログとして表示させるところまではできました。

ログとして確認するだけでは「見ました」→「終わり」だけなので、取得した情報をスプレッドシートに記録します。

流れ

入力するスプレッドシートを取得

まずは、記録するスプレッドシートを準備します。新規に作成しても良いのですが、何度も試作→実行を繰り返すたびにファイルが増えると大変なので、最初は既存のファイルを開いてそこに入力していきます。

ファイルを開くのは、フォームのときとほぼ同じ手順です。

「FormApp.openByUrl」が「SpreadsheetApp.openByUrl」となるだけです。
開いたら、入力するシートを指定します。シート名がわからないのでgetActiveSheet()を使って今表示されているシートを取得し、そこに書き込みます。
//スプレッドシートを開く。
const spsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/*********/edit#gid=0');
const sheet = spsheet.getActiveSheet();
シートにフォームのタイトルを書き込みます。
 //シートに行を追加し、formのタイトルを取得して入力
sheet.appendRow(['フォームタイトル', form.getTitle()])
実行してみましょう。

実行したら安全ではないサイト…と出た場合

おそらくまたもや「承認が必要」と出てきたはずです。
しかも今度は「安全ではない」と強調…
前回までは、フォームの中身を覗くだけでしたが、今回はシートに書き込むため、さらに承認が厳しくなっています。とても分かりにくいですが、「詳細」という文字をクリックして承認を進めてください。

指定したシートを確認

承認できたら、先ほど指定したシートに「フォームタイトル」という文字とフォームのタイトル名が入力されているはずです。
appendRow([‘フォームタイトル’, form.getTitle()])とあるように、シートへの入力は基本的に[]つまり配列形式で指定します。
appendRowは、指定シートの新しい行に[]内の内容を一つずつ入力していきます。なので、実行した数だけ行が増えていきます。。

ややこしいので、入力前にシートの内容をすべて消去するコードを追記します。

sheet.clear(); //シートの内容をクリア

//シートに行を追加し、formタイトル入力
sheet.appendRow(['フォームタイトル', form.getTitle()]);

次にフォームから取得したアイテムタイプや質問内容を入れていくのですが、「何列目に何が入っているのか」がわかりやすいように項目名を入れておきます。

 // 項目タイトル行を作成
  sheet.appendRow(['アイテムタイプ','質問内容']);

3行目に、フォームから取得したアイテムタイプと質問項目を入れます。

  sheet.appendRow([itemType, itemText]);   // フォームの内容を入力

まとめると、こうなります。

function myFunction() {

// フォームを開く
const form = FormApp.openByUrl('https://docs.google.com/forms/d/*********/edit');

//フォームの要素を配列で取得
const items = form.getItems();

Logger.log(items);

const itemparts = items[0]; //itemという配列の0番目の要素をitempartsとして取り出す。
const itemType = itemparts.getType(); //取得したitempartsのタイプを確認してitemTypeに保管

const itemText = itemparts.getTitle();//取得したitempartsの質問内容を確認してitemTextに保管

Logger.log(itemType);
Logger.log(itemText);

//スプレッドシートを開く。
const spsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/********/edit#gid=0');
const sheet = spsheet.getActiveSheet();

sheet.clear(); //シートの内容をクリア

//シートに行を追加し、formタイトル入力
sheet.appendRow(['フォームタイトル', form.getTitle()]);
// 項目タイトル行を作成
sheet.appendRow(['アイテムタイプ', '質問内容']);

sheet.appendRow([itemType, itemText]);  // フォームの内容を入力
}

そして、実行結果がこちら

おおおお、できた!

なんか、アプリっぽいものができた!!

ゴールまでは程遠いけど、道筋ができた・・気がする。

プログラムに肉付けをしていく

次に必要になってくるのは、、、

  • フォームのアイテム数は未知数なので、上記の動作をアイテムの数だけ自動で繰り返す
  • アイテムの種類によって異なる要素をうまく取得する。
    • 特に選択肢のあるアイテムについては、選択項目を取得する。
    • 選択肢の数も未知数なのでこちらも数に応じて繰り返せるようにする。
  • 正解・配点・解説などの項目も取得する。

これができたら、今度は「シートの内容をもとにフォームを作成していく」工程へとつながります。

ただ、この青字になっている部分、これこそがプログラミングの肝となる動作なのですが初心者が躓く大きな壁でもあるのです。。

一つ一つ、じっくり考えながら組み立てていきます。

コメント

タイトルとURLをコピーしました