<ねこフォーム8>ねこあつめフォームに「スケールアイテム」と「パラグラフテキストアイテム」を追加する

この記事では、GAS(Google Apps script)でねこあつめフォームに「スケールアイテム(5段階評価)」と「パラグラフテキストアイテム(コメント長文入力)」を追加します。

お世話になっているサイトは、いつも隣にITのお仕事さんの

GASでGoogleフォームに追加できる質問の種類とそのメソッドまとめ

です。

まずは、前回のおさらいをします。

「お名前」と「1番お気に入りのグッズ」と「めあど」はテキストアイテムをコードに記述して、「スプレッドシートから、ラジオボタン、チェックボックス、リストアイテムを取得する」コードを追加しました。

下記のコードを実行すると、このようなフォーム(目のマークのプレビュー画面)を得られます。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);


  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する


  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('1番お気に入りのグッズ');


  //メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);


  //←シート「項目データ」から、フォームに追加するアイテムの内容を二次元配列として取得する
  const dataValues=ss.getSheetByName('項目データ').getDataRange().getValues();
  dataValues.shift();

  /**
   * シート「項目データ」の値を二次元配列として取得して、指定の列を抜き出し一次元配列を構成する
   * 
   * @param{Object[][]}シート「項目データ」を二次元配列として取得したデータ
   * @param{number} 配列の列数(0以上のインデックス)
   * @return{Object[]} 指定の列の見出しタイトル行を除くデータによる一次元配列
   * 
   */
  function generateArray(values,column){
    return values.map(record=>record[column]).filter(value=>value);
  }
  
  
  //ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('ねこ種類')
    .setChoiceValues(generateArray(dataValues,0))
    .setRequired(true);

  //チェックボックスを追加する
  form.addCheckboxItem()
    .setTitle('他にあそんだグッズ')
    .setChoiceValues(generateArray(dataValues,1)) 
    .showOtherOption(true)//その他のチェックボックスを作っている
    .setRequired(true); 

  //←リストアイテムを追加する
  form.addListItem()
    .setTitle('ねこちゃんの都道府県')
    .setChoiceValues(generateArray(dataValues,2)) 
    .setRequired(true); 

}

今回の内容に入る前に、ねこあつめ画像で癒されます。

まるこたつで「とびちゃん」がごめん寝してる(=^x^=)

さて、今回は5段階評価などで使う「スケールアイテム」と、長文のコメントを書ける様になる「パラグラフテキストアイテム」を追加します。

それぞれの部品をフォームに追加するコードはこちらになります。

・スケールアイテム のコード

//あなたの「ねこ度」をスケールアイテムで追加する
  form.addScaleItem().setTitle('あなたのねこ度は? 1:低い 〜 5:高い').setRequired(true);//trueにすることで、入力必須にしている。

・パラグラフテキストアイテムのコード

//ご意見ご要望をパラグラフテキストアイテムで追加する
  form.addParagraphTextItem().setTitle('ご意見ご要望').setRequired(true);//trueにすることで、入力必須にしている。

以上になります。
他にも日付を入れるアイテムとかありましたが、実際に良く使われるのは、スケールアイテムやパラグラフテキストアイテムだと思って、そこに絞って追加しました。

最後にこれまでのコードです。
指定のフォルダに保存したい場合は最初に「setScriptProperty」の32桁のXXX…XXXの所にフォルダIDを指定して実行してから、正しく格納されたことを
「getScriptProperty」で確認してからメインの「myFunction」を実行して下さい。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);


  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する


  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('1番お気に入りのグッズ');


  //メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);


  //←シート「項目データ」から、フォームに追加するアイテムの内容を二次元配列として取得する
  const dataValues=ss.getSheetByName('項目データ').getDataRange().getValues();
  dataValues.shift();

  /**
   * シート「項目データ」の値を二次元配列として取得して、指定の列を抜き出し一次元配列を構成する
   * 
   * @param{Object[][]}シート「項目データ」を二次元配列として取得したデータ
   * @param{number} 配列の列数(0以上のインデックス)
   * @return{Object[]} 指定の列の見出しタイトル行を除くデータによる一次元配列
   * 
   */
  function generateArray(values,column){
    return values.map(record=>record[column]).filter(value=>value);
  }
  
  
  //ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('ねこ種類')
    .setChoiceValues(generateArray(dataValues,0))
    .setRequired(true);

  //チェックボックスを追加する
  form.addCheckboxItem()
    .setTitle('他にあそんだグッズ')
    .setChoiceValues(generateArray(dataValues,1)) 
    .showOtherOption(true)//その他のチェックボックスを作っている
    .setRequired(true); 

  //リストアイテムを追加する
  form.addListItem()
    .setTitle('ねこちゃんの都道府県')
    .setChoiceValues(generateArray(dataValues,2)) 
    .setRequired(true); 


  //←あなたの「ねこ度」をスケールアイテムで追加する
  form.addScaleItem().setTitle('あなたのねこ度は? 1:低い 〜 5:高い').setRequired(true);//trueにすることで、入力必須にしている。


  //←ご意見ご要望をパラグラフテキストアイテムで追加する
  form.addParagraphTextItem().setTitle('ご意見ご要望').setRequired(true);//trueにすることで、入力必須にしている。


}



//プロパティストアにフォルダIDを格納する
function setScriptProperty(){
  PropertiesService.getScriptProperties().setProperty('FOLDER_ID','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
}

//プロパティストアにフォルダIDが格納されたことを確認する
function getScriptProperty(){
  const folderid=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
  console.log(folderid);

}

ねこフォームの基礎はこの記事で最終回にして、次からはフォーム実践編に入リます。長らくご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃん

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。