CTO室情報システム担当の吉澤です!
GoogleDriveを操作をする際に、SelectBoxの項目を動的にDrive内からとってくると視覚的に扱いやすいと思い、GASのWebアプリケーションを利用したツールを作成しました。
公式のHtmlServiceクラスのcreateHtmlOutput()
を使うと表示できたので、メモとして残します。
今回はこのマイフォルダの中にあるフォルダのリストをWebアプリケーション上のSelectBoxで選択できるようにします。
Webアプリケーションを開いた時はfunction doGet()
を実行します。
createHtmlOutput()
で全てのHTMLを上書きしてしまうため、
html内の特定のワードをreplaceしたものを引数として渡します。
今回は<putFolderSelectBox>
に生成したSelectBoxのHTMLを渡して表示します。
コード.gs
function doGet() { return HtmlService.createHtmlOutput(this.setSelectBox()); } function setSelectBox(){ var html = HtmlService.createHtmlOutputFromFile('index').getContent(); var lists = this.ls(); var select = '<select name="folderId">'; for (list of lists){ select += '<option value="' + list[0] + '">' + list[1] + '</option>'; } select += '</select>'; return html.replace('<putFolderSelectBox>', select); } function ls() { var currentFolder = DriveApp.getFolderById('フォルダID'); var folders = currentFolder.getFolders(); var files = []; while(folders.hasNext()) { var folder = folders.next(); files.push([folder.getId(), folder.getName()]); } return files; }
DriveApp.getFolderById();
に入れるフォルダIDは、Driveもしくはフォルダにアクセスし、URLからコピペします。
getFolders()
でフォルダのListが取れるので、hasNext()
で回し、ファイルのIDと名前を取得し、
SelectBoxのHTMLのValueと選択肢に当てはめていきます。
index.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <putFolderSelectBox> </body> </html>
HTML内のReplaceしたいところに<putFolderSelectBox>
を入力します。
公開からWebアプリケーションとして導入を選択します。
このようにフォルダ一覧がSelectBoxとして表示されました。
Selectで選択したものを受け取る場合は、
Formで囲んで、action先はWebアプリケーションのURLに、
コード.gs内でdoPost()
を用意すると、引数で受け取ることができます。
GASはまだ慣れていないのですが、Driveの情報をHTMLで視覚的に表現ができるのは便利でいいですね👍