0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

8.スプレッドシートの値をもとにGoogleFormの選択リスト値を自動的に更新する

Last updated at Posted at 2024-09-10

今日の目標:スプレッドシートが更新されたが、GoogleFormの選択肢が自動で最新化されるようにする!

0.前回の振り返り

キーワード検索ができるようになりました。

1.スプレッドシートを準備する

今回はトライアルが決まっていない猫のみを抽出できるように、あらかじめQuery数式を書いたシートを準備しておきます。
image.png

2.GoogleFormを準備する

新規フォームを作成し、リスト項目・複数選択項目を用意します。
image.png

3.GASコードの準備

スプレッドシートからGASを作成し、下記コードを用意します。

UpdateFormSelect.gs
function updateFormOptions() {
  // スプレッドシート情報取得
  const spreadSheetId = 'もとになるスプレッドシートID';
  let sheet = SpreadsheetApp.openById(spreadSheetId).getSheetByName('指定のシート名');

  // B列の2行目~最後まで猫名取得(行番号、列番号、範囲)
  let cats = sheet.getRange(2, 2, sheet.getLastRow() - 1).getValues();

  // 選択リスト、複数選択チェックボックスを更新
  const satooyaEntryId = '更新したいフォームID';
  setSelect(satooyaEntryId, cats);
  const eventReserveId = '更新したいフォームID';
  setSelect(eventReserveId, cats);
}

/**
 * Googleフォームのプルダウン内の値を上書きする
 **/
function setSelect(id, cats){
  let form = FormApp.openById(id);

  // 質問項目が選択リスト・複数選択チェックボックスのもののみ取得
  let listItems = form.getItems(FormApp.ItemType.LIST);
  let checkItems = form.getItems(FormApp.ItemType.CHECKBOX);

  listItems.forEach(function(item){
    // 質問項目が「お迎え希望の猫」を含むものに対して、スプレッドシートの内容を反映する
    if( item.getTitle().match(/お迎え希望の猫.*$/) ){
      let listOptions = item.asListItem();
      let choices = [];

      cats.forEach(function(name){
        if(name != ""){
          choices.push(listOptions.createChoice(name));
        }
      });

      // プルダウンの選択肢を上書きする
      listOptions.setChoices(choices);
    }
  });

  checkItems.forEach(function(item){
    // 質問項目が「面談ご希望の猫」を含むものに対して、スプレッドシートの内容を反映する
    if( item.getTitle().match(/面談ご希望の猫.*$/) ){
      let listOptions = item.asCheckboxItem();
      let choices = [];

      cats.forEach(function(name){
        if(name != ""){
          choices.push(listOptions.createChoice(name));
        }
      });

      // プルダウンの選択肢を上書きする
      listOptions.setChoices(choices);
    }
  });
}

今回は2つのフォームを更新したかったので、2回呼び出しています。

4.トリガーの設定

今回はデプロイを行いません。
コードを保存し、うまく実行できたらトリガーを設定します。
サイドメニューからトリガーを選択し、下記ような設定をすればもうすぐに動きます。
image.png


今日はここまで

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?