ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【GAS/Googleスプレッドシート】ファイル自身が格納されているフォルダの取得方法

 スプレッドシートと同じGoogleドライブのフォルダ内にファイルを作りたい時などがあるかと思います。

 そのためにはファイルがどのフォルダにあるかを取得する必要があります。

 参考資料のページそのままですが今回はその備忘録です。


 では始めます。


・ファイル自身が格納されているフォルダ取得方法
 結論から言うと以下の方法で取得できます。

function myFunction() {
  // 自身のスプレッドシートのIDを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  
  // 親フォルダ(ファイル自身が格納されているフォルダ)を取得
  var parentFolder = DriveApp.getFileById(ssId).getParents();
  var folder = parentFolder.next();

  // フォルダ名を表示
  SpreadsheetApp.getUi().alert(folder.getName());
}

「DriveApp.getFileById(ssId).getParents();」のところで親フォルダのイテレータ(FolderIterator)を取得しています。

 これは何かというと、Googleドライブでファイルを選択したときに画面右側に出てくる「パス」に記載されているフォルダです。
f:id:rikoubou:20191205163952p:plain

(※ちなみに普通に使っていればここには1つのフォルダしか表示されませんが、Googleドライブ上でファイルを選択した状態で「Shift+Zキー」を押すと追加できます)

 親フォルダのイテレータが取得できたら「var folder = parentFolder.next();」で親フォルダを取得できます。

 複数ある場合はnext()をループさせて該当のフォルダ名が一致したものを取得すればよいかと思います。


 以上がファイル自身が格納されているフォルダの取得方法です。

 ソースコード的には単純ですが、知らないとできないことだ思ったので記事にした次第です。


・参考資料