2
1

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 App Scriptで絶対パスを使ってフォルダのIDを取得したい

Posted at

1. はじめに

GASではフォルダやファイルへアクセスする際に,IDを使います.このIDはフォルダやファイルごとに一意に与えられているため,あるフォルダの中に同じフォルダやファイルを置くことが許されています.しかし,これが原因(?)で絶対パスを指定してフォルダやファイルにアクセスする関数がありません.この記事では,ある条件下でそれを実現するための関数を作成したのでご紹介します.

2. 前提条件

読者へ向けて

GASの実行方法や文法については知っているものと仮定します.

Googleドライブのフォルダ階層について

同じフォルダ階層に同じ名前のフォルダ or ファイルが無いことを仮定します.
(この条件がこの記事のキモになります.)

3. コード

次のコードは指定したフォルダのIDを返す関数です.
・引数 :絶対パス(例:"/path/to/your/folder")
・戻り値:指定したフォルダが存在した場合はフォルダID,存在しなかった場合は"Not found."

指定したフォルダのIDを取得する関数
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歴がまだまだ浅いため,この記事に間違いや分かりにくい点があると思います.その際は,コメントにてお知らせいただけますと幸いです.

参考にしたサイト

Google Apps Scriptでファイル名、フォルダ名からファイルへアクセスしたい

Google更新レファレンス【Class DriveApp】

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?