フォルダを階層化して一気に作成したい
プロジェクトごとにドキュメントの管理をする上で、フォルダごとに設計資料や営業関係の資料、マニュアルなどなどフォルダ分けてして管理すると思います。これをプロジェクトが発足するたびに作るの面倒なだなーと思ってスクリプトでのやり方を調査。
Google Apps Scriptの Drive Service
Google Apps ScriptのリファレンスにDrive ServiceというClassがあったのでこれを使います。
ルートディレクトリにフォルダの作成
早速、フォルダの作成をしてみます。以下のような階層のフォルダ構成を作成してみます。
テストプロジェクト ┣営業関係 ┣設計関係 ┗運用関係 ┣運用マニュアル ┗顧客情報
単純に自分のルートディレクトリにフォルダの作成をするには以下のように記述します。
var folder = DriveApp.createFolder("テストプロジェクト");
createFolder
メソッドに引数に作成するフォルダ名を渡します。戻り値は、Folderクラスになります。これをfolder
という変数に保存しています。これは、この作成したフォルダの中にさらにフォルダを作成するために戻り値を保存しておく必要があります。
2階層目のフォルダ作成
次にテストプロジェクトフォルダの下の階層を作成。folder
変数のクラスを使って、createFolder
メソッドを同じように実行します。
var folder = DriveApp.createFolder("テストプロジェクト"); var args1 = ["営業関係","設計関係","運用関係"]; var folder1 = []; for (var i = 0; i < args1.length; i++){ folder1[i] = folder.createFolder(args1[i]); }
作成するフォルダが複数なので、フォルダ名を配列(args1
)に保存して、それを元にフォルダ作成をします。その際に、作成したフォルダの戻り値も配列(folder1
)に保存しておきます。さらに下の階層を作成するためです。
3階層目のフォルダ作成
最後に3階層目の作成。「運用関係」フォルダの中に「運用マニュアル」「顧客情報」のフォルダを作成します。
var folder = DriveApp.createFolder("テストプロジェクト"); var args1 = ["営業関係","設計関係","運用関係"]; var args2 = ["運用マニュアル","顧客情報"]; var folder1 = []; for (var i = 0; i < args1.length; i++){ folder1[i] = folder.createFolder(args1[i]); } for (var i = 0; i < args2.length; i++){ folder1[2].createFolder(args2[i]); }
3階層目のフォルダ名も2階層目と同じように配列(args2
)に保存しておきます。それを繰り返すのですが、2階層目の「運用関係」フォルダのクラス(folder1[2]
)がターゲットなので、それに対してcreateFolder
メソッドを実行します。
この階層が最後なので、戻り値は取っていません。
できたらこのプログラムを実行します。実行したらGoogleDriveのマイドライブ直下にフォルダが作成されているか確認してみましょう。
できた!\(^o^)/
ちゃんと3階層目まで出来上がっています。これでフォルダ作成が楽になる。
指定のフォルダの中にフォルダを作成する
もう少しアレンジ。先程はマイドライブ直下に作成したのですが、指定したフォルダの中にフォルダを作成したい場合はどうするか?その場合、フォルダIDを指定してフォルダを作成することになります。
まずは、フォルダのIDをどこで取得するかというところから。指定するフォルダをGoogleDriveで選択して、そのURLを確認してください。
foldersパス以下の乱数がIDになります。
https://drive.google.com/drive/folders/{フォルダid}
これをコピーして以下のようにプログラムを書き換えます。
function createFolder() { var folder = DriveApp.getFolderById("フォルダID"); //var folder = DriveApp.createFolder("テストプロジェクト"); var args1 = ["営業関係","設計関係","運用関係"]; var args2 = ["運用マニュアル","顧客情報"]; var folder1 = []; for (var i = 0; i < args1.length; i++){ folder1[i] = folder.createFolder(args1[i]); } for (var i = 0; i < args2.length; i++){ folder1[2].createFolder(args2[i]); } }
DriveApps
クラスのgetFolderById
メソッドにフォルダIDを渡すと戻り値のFolder
クラスが返ってくるので、これを基準にフォルダ作成をすればOK。ここだけで他は変えなくて大丈夫です。便利〜(^o^)