参加申し込みフォーム内の学生入力項目のうち、学校名・顧問名・顧問メールアドレス・顧問電話番号は、講習会が開催されている時点で決定している項目で学校名が分かれば一意に決定する情報です。
そこで、これらの項目の入力を容易にし入力誤りを防ぐためにプルダウンメニューから選択できるように変更します。
なお、これら4つの情報は、毎年の講習会で変更となる可能性があるため、新たなスプレッドシートに情報を持たせフォーム作成時に利用することにします。
スプレッドシートの情報からプルダウンリストを生成する
講習会参加校情報ファイルを事前に作成する
講習会参加校情報という名前のスプレッドシートをルートフォルダに作成します。
ファイルは講習会実施年別に西暦でシートを分けて作成して学校情報(学校名 引率する顧問名称 顧問メールアドレス 顧問電話番号)を入力しておきます。
講習会参加校情報ファイルからプルダウンリストを作成する
参加申し込みフォームへ講習会参加校情報ファイルの情報をもとにプルダウンメニューを作成する。
var files = DriveApp.getRootFolder().getFiles(); var file; while(files.hasNext()) { file = files.next(); if(file.getName() == "講習会参加校情報"){ break; } } var spreadsheet = SpreadsheetApp.openById(file.getId()); var d = new Date(); var year = d.getFullYear(); Logger.log(year); var school = spreadsheet.getSheetByName(year); Logger.log(school); var range = school.getDataRange(); var value = range.getValues(); Logger.log(value); Logger.log(value.length); var menu =[]; for(i=1;i<value.length;i++){ info = value[i]; Logger.log(info); menu.push(value[i]); Logger.log(menu); } form.addListItem() .setTitle('学校名と顧問の先生の名前を選んでください。') .setChoiceValues(menu);
作成方法の違いによるStandalone とContainer-Bound スクリプトの違い
GASは、作成方法により Standalone スクリプトと Container-Bound スクリプト にわかれます。
google公式リファレンスは 下記のリンク先です。
Standaloneスクリプト
Standalone スクリプトとは、Googleスプレッドシート、ドキュメント、スライド、フォームファイル、または Googleサイトとは独立して作成され単独で存在するスクリプトのことです。
googleドライブより [ 新規 ] > [その他 ] > [google app script ]を選択することでエディタを起動して作成します。
実行は、実行メニューから起動する関数名を選んで行うことが出来ます。
関数が一つしかない場合は 「▶」 をクリックすることでも起動できます。
他のファイルとリンクしていないので、リンク解除操作なしで削除できます。
Container-Bound スクリプト
Container-Bound スクリプトは、 Googleスプレッドシート、ドキュメント、スライド、またはファイル の [ ツール]> [スクリプトエディター]から作成されたスクリプトのことで、各ドキュメントに結合して存在するスクリプトのことです。
ドキュメントと結合して存在しているスクリプトのため、結合したドキュメントの操作が簡単に行える下記のクラスが使用できます。
getActiveSpreadsheet()
、getActiveDocument()
、getActiveForm(
)getUi
getActiveSheet()
、getActiveRange()
、ActiveCell()
、setActiveSheet(sheet)
setActiveRange(range)
他のドキュメントとリンクしているため、削除にはリンク解除操作が必要です。
講習会参加申し込みスクリプトは、 Container-Bound スクリプトです。
スクリプトにバインドしていないスプレッドシートの参照
スクリプトにバインドしていない スプレッドシートを参照するには、 まずイテレーターを取得します。
ファイルが存在するドライブからDriveAppオブジェクトの getFiles() メソッドでFile オブジェクトがまとめられた FileIterator( イテレーター)を取得しFileオブジェクトを順次取得します。
詳細は、下記リンク先のGoogleリファレンスを参照してください。