こんにちは、もりです!
この記事では、Googleドライブで「指定フォルダ内のファイル名一覧を取得する方法」をいくつか紹介します。
スポンサーリンク
Contents
指定フォルダ内のファイル名一覧を取得する
2通りの「フォルダ指定方法」を紹介します。
「フォルダID」でフォルダを指定する
この「フォルダID」のフォルダを探索してね、と指定する方法です。
「list」というシートのA列に、取得結果を書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function getFileList1_1() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('list'); let row = 1; // A列の値をクリア sheet.getRange(1,1,sheet.getMaxRows(),1).clearContent(); // 指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト) const files = DriveApp.getFolderById('フォルダID').getFiles(); while (files.hasNext()) { const file = files.next(); const filename = file.getName(); console.log(filename); // A列に書き込み sheet.getRange(row, 1).setValue(filename); row++; } } |
「スプレッドシートが存在するフォルダ」を指定する
このスプレッドシート(コンテナバインドスクリプト)が存在するフォルダ(=同じ階層)を探索してね、と指定する方法です。
スプレッドシートの場所を移動すれば、スクリプトを書き換えなくても、実行結果が変わるのがポイントです。
「list」というシートのA列に、取得結果を書き込みます。
1 2 3 4 5 6 7 8 9 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 45 46 47 48 |
function getFileList1_2() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('list'); let row = 1; // A列の値をクリア sheet.getRange(1,1,sheet.getMaxRows(),1).clearContent(); //★POINT★このスプレッドシートが存在するフォルダIDを取得 const folderId = getFolderId_(); // 指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト) const files = DriveApp.getFolderById(folderId).getFiles(); while (files.hasNext()) { const file = files.next(); const filename = file.getName(); console.log(filename); // このスプレッドシートは書き込み対象外 if (filename === ss.getName()) continue; // A列に書き込み sheet.getRange(row, 1).setValue(filename); row++; } } /* * このスプレッドシートが存在するフォルダの「フォルダID」を取得する * * @return {string} フォルダID */ function getFolderId_() { //https://developers.google.com/apps-script/reference/drive/folder-iterator.html const ssId = SpreadsheetApp.getActiveSpreadsheet().getId(); const parentFolder = DriveApp.getFileById(ssId).getParents(); const folderId = parentFolder.next().getId(); return folderId; } |
ファイル名に「指定の文字列」を含むファイルの一覧を取得する
上記のスクリプトは、指定フォルダ内の「すべてのファイル」を取得しました。次は、正規表現を使って、取得するファイル名を絞り込んでみましょう。
下記は、ファイル名の先頭が「test」から始まるファイルの一覧を取得するスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
function getFileList2_1() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('list'); let row = 1; // A列の値をクリア sheet.getRange(1,1,sheet.getMaxRows(),1).clearContent(); // 指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト) const files = DriveApp.getFolderById('フォルダID').getFiles(); // ★POINT★正規表現で絞り込む const reg = /^test.*?$/; while (files.hasNext()) { const file = files.next(); const filename = file.getName(); console.log(filename); if (filename.match(reg)) { //条件に合致するファイル名のみ書き込み sheet.getRange(row, 1).setValue(filename); row++; } } } |
ファイルに関わる色々な情報を併せて取得する(サイズ・URLなど)
最後におまけです。ファイルサイズやURLなど、他の情報も取得することができます。
Fileクラスの公式リファレンスを参照して、取得できる情報を確認してみましょう(get~~メソッド)
下記は、ファイル名・サイズ・URLの3データを取得するスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
function getFileList2_2() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('list'); // 指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト) const files = DriveApp.getFolderById('フォルダID').getFiles(); let arrFiles = []; while (files.hasNext()) { const file = files.next(); const name = file.getName(); const size = file.getSize(); const url = file.getUrl(); arrFiles.push([name,size,url]); } console.log(arrFiles); // A1セルを起点にして一括書き込み sheet.getRange(1,1,arrFiles.length,arrFiles[0].length).setValues(arrFiles); } |
【まとめ】ファイル名一覧を取得する
GASを使って、Googleドライブ内の「指定フォルダのファイル名一覧を取得する方法」を紹介しました。
- 「フォルダID」を使ってフォルダを直接指定する
- 「スプレッドシートが存在するフォルダ」を指定する
- 正規表現を使って、取得するファイル名を絞り込む
- ファイル名以外の情報(サイズ・URLなど)も取得する
要件に合わせて、組み合わせて使ってみてくださいね。
スポンサーリンク
スポンサーリンク