Google Apps ScriptでFormのGridをスプレッドシートより再構築する【GAS】

前回の複数レコードを送信するフォームのエントリーにて、擬似的にGoogle Formで複数レコードを登録するコードを紹介しましたが、作っていて思い出したのが、「ドロップダウンリストやグリッドパーツの選択肢」の量がそこそこある場合、1回だけ作るならともかく、手直しが入る可能性がある(例えば支店名リスト。増えたり減ったり、統合したり)場合、位置や追加、削除が酷く面倒だったのを思い出しました。

これをスプレッドシート上の値を持って再構築してみようというのが今回の趣旨です。今回はちょいネタですが、その効用は非常に大きいです。他のパーツ類も同様に再構築が可能なので、変動の多い項目は、スプレッドシート連携にしてしまうと、メンテナンスが楽になります。

今回使用するファイル類

基本的には前回のサンプルファイルに追加している形です。

図:このグリッドパーツを再構築するのが今回の目的

ソースコード

今回は既存のグリッド項目()を再構築するだけなので、に関しては足したり引いたりしていません。しかし、列の追加等も非常に簡単です。

//スプレッドシートのID
var sheetid = "ここにスプレッドシートのIDを入れる";

function OverwriteGrid() {
  //スプレッドシートを取得
  var sheet = SpreadsheetApp.openById(sheetid).getSheetByName("日付リスト");
  
  //日付リストを取得する
  var data = sheet.getRange("A2:A").getValues();
  var dlength = data.length;
  
  //1次元配列として作り直す
  var array = [];
  for(var i = 0;i<dlength;i++){
    if(data[i][0] == ""){
      //空白の時は何もしない
    }else{
      array.push(data[i][0]);
    }
  }

  //アクティブフォームを取得する
  var form = FormApp.getActiveForm();

  // 質問項目がプルダウンのもののみ取得
  var items = form.getItems(FormApp.ItemType.GRID);
  
  items.forEach(function(item){
    //対象のグリッドパーツを見つける
    if(item.getTitle().match(/出勤可否.*$/)){
      //質問セクションを取得する
      var question = item.asGridItem();

      //選択肢を上書きする
      question.setRows(array);
    }
  });

}

ポイント

  • スプレッドシート側は、単純に1列にリストを並べてるものを取ってきています(日付リストシートから取得します)。
  • 入れ替えるためには、リストのデータを1次元配列にする必要があるため、配列を再構築しています。
  • 配列データは空白の場合には、スルーし、ある場合にはpushしています。
  • アクティブフォームに於いて「ItemTypeはGRID」のものをitemsとして取得しています。
  • itemsの中でセクションタイトルが「出勤可否」に該当するものを取得し、asGridItemでそれを取得します。
  • setRowsメソッドで行のデータを上書き再セットできます。
  • setColumsメソッドで、列のデータを上書き再セットができます。こちらも1次元配列でOK.今回のケースで言えば["出勤","休暇","半休"]といったような形でセットすればOK.

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)