BETA

GAS小ネタ:フォルダ自動取得&スプレッドシート出力

投稿日:2019-10-02
最終更新:2019-10-02

どうも。◯no(@no13033934)です
今回は完全に小ネタのシェアです

もくてき

ガンガン増えるフォルダ、小フォルダ、孫フォルダ。リスト化したいときって有りますよね。有ったら良いなあ。
それを自動的に探索するコードです。

イメージ

フォルダの取得範囲は以下の図の通りです。並列に存在するフォルダの配下を自動で探索し、スプレッドシートに出力してくれます。

スプレッドシートの配置を変更すると、取得できるフォルダも変化します。

スプレッドシートへの出力イメージはこんな感じ。

ソースコード

ということで全体を貼ります。これを任意のスプレッドシートに紐付いたGASにコピペすればすぐ動くはず。結果を出力したい空のシートを表示しながらカスタムメニューから『フォルダリスト出力』を選択すればOK。

// SpreadSheetにメニューを表示させる関数  
function onOpen(e) {  
  var ui = SpreadsheetApp  
  .getUi()  
  .createMenu('自動取得')  
  .addItem('フォルダリスト出力', 'writeFoldersList')  
  .addToUi();  
}  

/* フォルダリストを返却する関数(再帰)  
**INPUT  
- folders: 捜索するフォルダ  
- list: フォルダリストが格納される配列  
- parentFolderName: 親フォルダ名  
*/  
function getFolders(folders, list, parentFolderName){  
  while (folders.hasNext()){  
    var folder = folders.next();  
    list.push({  
      "folderID" : folder.getId(),  
      "parentFolderName" : parentFolderName,  
      "folderName" : folder.getName()  
    });  
    getFolders(folder.getFolders(), list, folder.getName());  
  }  
}  

function writeFoldersList() {  

  var sheet = SpreadsheetApp.getActiveSpreadsheet();  
  var folder = DriveApp.getFileById(sheet.getId()).getParents(); // SpreadSheetが配置されているフォルダ情報を取得する  
  var folderList = []; // フォルダリスト格納用配列  
  getFolders(folder, folderList, ""); // フォルダを自動取得してフォルダリストに格納  

  // Sheetへ書き出すための二次元配列作成  
  var header = [  
    'ID',  
    '親フォルダ名',  
    'フォルダ名'  
  ]  
  var writeList = [header];  
  folderList.forEach(function(folder){  
    writeList.push([  
      folder['folderID'], // フォルダID  
      folder['parentFolderName'], // 親フォルダ(※有れば  
      folder['folderName'] // フォルダ名  
    ]);  
  });  

  // Sheetに書き出し  
  sheet.getActiveSheet().getRange(1, 1, writeList.length, 3).setValues(writeList);  
}  

個人的なポイントは以下でしょうか。

  • 再帰的にフォルダを取得している
  • ファイルの配置を問わない

おわりに

ちなみに、私はフォルダ情報と合わせて、以下の情報もシートに書き出しています。

  • 各フォルダ配下のファイルの一覧取得
  • 各フォルダ・ファイルの編集権限/閲覧権限保有者取得

上記の目的としては、個人情報を含んだファイルの権限が適切に付与されているかどうかの確認ですね。今後時間が有ればこちらについても記事を書きたいところ。
他にも使えそうなシーンが有れば教えてほしいっす。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

リベラルアーツで殴る系エンジニア

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう