【GAS】特定のフォルダ内(子フォルダ、孫フォルダ)のファイルをすべて取り出す方法
<スポンサーリンク>
特定のフォルダの内のファイルをすべて取り出すプログラムを作りましたので、
参考にしてください。
コード
コードは下記の通りとなります。
最初だけ、ファイルを取り出したいフォルダを選択し、
それ以降はそのフォルダ内にある、子フォルダ、孫フォルダ、ひ孫フォルダ~~~~~まで、
自動で反復して検索してくれるようにしてあります。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | function execution() { SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(2, 1, 1000, 4).clearContent() //特定のフォルダを指定する var Driveid = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 8).getValue() //親となるフォルダを関数に渡す getPicID(Driveid) } function getPicID(Driveid) { // フォルダ内のファイルを一括取得 var files = DriveApp.getFolderById(Driveid).getFiles(); // 配列を宣言 var Pic = []; // 配列に「名前」「URL」「ID」 while (files.hasNext()) { //一括取得したファイルの中から順に一つ取り出す var file = files.next(); //「名前」「説明」「URL」をそれぞれ格納 Pic.push([ file.getName(), file.getUrl(), file.getId(), ]); } //最終行を取得 var lastY = SpreadsheetApp.getActiveSpreadsheet().getLastRow() //最終行に追加 SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(lastY + 1, 1, Pic.length, Pic[0].length).setValues(Pic) //子フォルダを格納 var childFolders = DriveApp.getFolderById(Driveid).getFolders(); //子フォルダがなくなるまで実行 while (childFolders.hasNext()) { var childFolder = childFolders.next(); //子フォルダのIDを取得し、同じ関数に返す。 getPicID(childFolder.getId()) } } |
肝となる部分
肝となるのは、下に示す部分となっており、
1階層目の処理が終わった後に、その子フォルダ(2階層目)でも同様の処理を行います。
また、その子フォルダ内に子フォルダ(3階層目)があった場合も同様の処理を行います
というように、一見無限ループになるかのような処理を行っております。
01 02 03 04 05 06 07 08 09 10 11 | function ★関数★(Driveid)~~~ ~~~ //子フォルダを格納 var childFolders = DriveApp.getFolderById(Driveid).getFolders(); //子フォルダがなくなるまで実行 while (childFolders.hasNext()) { var childFolder = childFolders.next(); //子フォルダのIDを取得し、同じ関数に返す。 ★関数★(childFolder.getId()) } |
繰り返し処理には使えるやり方なので覚えておいて損はないです。
このコードの実際の動き
このコードの実際の動きは、下記ボタンより、
GASをコピーして実行してみてください。
コメント欄
TypeError: Cannot read property 'length' of undefined
が出力されます。