1. はじめに
GASではフォルダやファイルへアクセスする際に,IDを使います.このIDはフォルダやファイルごとに一意に与えられているため,あるフォルダの中に同じフォルダやファイルを置くことが許されています.しかし,これが原因(?)で絶対パスを指定してフォルダやファイルにアクセスする関数がありません.この記事では,ある条件下でそれを実現するための関数を作成したのでご紹介します.
2. 前提条件
読者へ向けて
GASの実行方法や文法については知っているものと仮定します.
Googleドライブのフォルダ階層について
同じフォルダ階層に同じ名前のフォルダ or ファイルが無いことを仮定します.
(この条件がこの記事のキモになります.)
3. コード
次のコードは指定したフォルダのIDを返す関数です.
・引数 :絶対パス(例:"/path/to/your/folder")
・戻り値:指定したフォルダが存在した場合はフォルダID,存在しなかった場合は"Not found."
function getFolderId(absolutePath){
var folderId = "Not found.";
// パスを"/"で分割
// pathList[0]は""が入るので,以降では使用しない
var pathList = absolutePath.split("/");
// パスで指定したフォルダが見つからない場合
if(!DriveApp.getRootFolder().getFoldersByName(pathList[1]).hasNext()){
return folderId;
}
var folder = DriveApp.getRootFolder().getFoldersByName(pathList[1]).next();
for(var i=2; i<pathList.length; i++){
// パスで指定したフォルダが見つからない場合
if(!folder.getFoldersByName(pathList[i]).hasNext()){
return folderId;
}
folder = folder.getFoldersByName(pathList[i]).next();
}
folderId = folder.getId();
return folderId;
}
4. 終わりに
この記事の前提条件として,「同じフォルダ階層に同じ名前のフォルダ or ファイルが無いことを仮定」がありました.この条件は,Googleドライブのフォルダ設計をうまく行なえれば,クリアできる条件だと思います.
GoogleAppScript歴がまだまだ浅いため,この記事に間違いや分かりにくい点があると思います.その際は,コメントにてお知らせいただけますと幸いです.