90
94

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Googleフォームのプルダウンにスプレッドシートの内容を反映させる

Posted at

備忘録としてメモします。

はじめに

Googleフォームのプルダウン内にスプレッドシートの内容を反映させたい要望があったので対応しました。
(手打ちでスプレッドシートの内容をGoogleフォームに入力するのって面倒ですよね、、、)

やったこと

スプレッドシート側で値の変更をして保存した場合、
今回作成したスクリプト(スプレッドシートの特定の列の内容をGoogleフォームのプルダウンに反映させる)が
実行される。

手順

①スプレッドシート側に適当にデータを入力する
②Googleフォーム側に適当に項目を追加する
③スクリプトを作成する
④実行する
⑤スプレッドシート側の値が変更されたら自動でスクリプトが実行されるように設定する

①スプレッドシート側に適当にデータを入力する

以下のように適当にデータを入力します。

DJs.png

②Googleフォーム側に適当に項目を追加する

以下のように適当に項目を追加しました。

DJアンケート.png

③スクリプトを作成する

①で作成したスプレッドシートを開き以下の手順でスクリプトエディタを開きます。
ツール>スクリプト エディタ
そして、
以下のコードをコピペして下さい。
(※スプレッドシートとGoogleフォームのIDは、自分のものに変更して下さい)

.js
function overwriteDjList() {
  
  /**
  // スプレッドシートの情報を取得する
  // 
  **/
  
  //スプレッドシートのID →「https://docs.google.com/spreadsheets/d/△△△/edit#gid=0」の△△△を↓に記述
  var sheets = SpreadsheetApp.openById('△△△').getSheets();
  
  // シート1の情報を取得
  //(デフォルトのスプレッドシートの場合、シート1という名称になっています)
  var sheet = sheets[0];
  
  // スプレッドシートのA1のセルが「DJ」の場合
  if("DJ" == sheet.getRange("A1").getValue()){
    
    // A行の2行目からコンテンツをもつ最後の行までの値を配列で取得する
    var colA = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues();
  }
  
  /**
  // Googleフォームのプルダウン内の値を上書きする
  // 
  **/
  
  // GoogleフォームのIDを設定 →「https://docs.google.com/forms/d/〇〇〇/edit」の〇〇〇を↓に記述
  var form = FormApp.openById('〇〇〇');
  
  // 質問項目がプルダウンのもののみ取得
  var items = form.getItems(FormApp.ItemType.LIST);
  
  items.forEach(function(item){
    // 質問項目が「好きなDJを選択して下さい」を含むものに対して、スプレッドシートの内容を反映する
    if(item.getTitle().match(/好きなDJを選択して下さい.*$/)){
      var listItemQuestion = item.asListItem();
      var choices = [];
      
      colA.forEach(function(name){
        if(name != ""){
          choices.push(listItemQuestion.createChoice(name));
        }
      });
      
      // プルダウンの選択肢を上書きする
      listItemQuestion.setChoices(choices);
    }
  });
  
}

↓こんな感じ

コード.png

④実行する

実行.png

実行ボタンを押すと、
許可を求められる画面が出てくるかと思いますが、許可して下さい。

うまく実行できたら、
Googleフォーム画面を確認してみましょう。
下記のように、プルダウン内にスプレッドシートの内容が反映されていれば成功です。

DJsss.png

⑤スプレッドシート側の値が変更されたら自動でスクリプトが実行されるように設定する

スクリプトを作成したファイルを開きます。
以下のボタンを押してトリガーの設定を行います。

トリガー.png

その後以下のようにしてトリガーの設定を行って下さい。
・トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。
をクリックする

・以下の通りに設定を行う
実行:
 "overwriteDjList"
イベント:
 "スプレッドシートから"
 "値の変更"

・保存

以上で、スプレッドシート側で値の変更をして保存した場合、
今回作成したスクリプト(スプレッドシートの特定の列の内容をGoogleフォームのプルダウンに反映させる)が実行されます。

おわり

ちなみに、僕はSteve Aokiが好きです。

90
94
3

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
90
94

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?