Google Apps Scriptでファイルやフォルダを検索する方法をまとめました。
この記事でわかること
- DriveAppクラスで検索に使用する2つのメソッドの使い方がわかる。
- searchFiles()メソッド
- getFilesByType()メソッド
- GASを使って拡張子・ファイルタイプでファイルを検索する方法がわかる。
- GASを使って更新日時でファイルを検索する方法がわかる。
- GASを使ってファイル名でファイルを検索する方法がわかる。
Google Apps Scriptを使ってGoogleドライブのファイルを検索する方法は?
ファイルの検索に使うメソッド
GASでGoogle Drive内のファイル検索するにはDriveAppクラスの2つのメソッドをよく使います。
Google driveの検索・抽出に使うメソッド
- searchFiles()メソッド
- getFilesByType()メソッド
GASリファレンス
- Fileクラスのメソッド一覧
- Folderクラスのメソッド一覧
すべてのファイル・フォルダを取得
ドライブ内のすべてのファイルを取得します。
//GoogleDrive内のすべてのファイルをログに出力します。 function listAllFiles() { const files = DriveApp.getFiles(); while (files.hasNext()){ Logger.log(files.next().getName()); } }
Googleドライブ内のすべてのフォルダを取得します。
//GoogleDrive内のすべてのフォルダーをログに出力します。 function listAllFolders() { const folders = DriveApp.getFolders(); while (folders.hasNext()){ Logger.log(folders.next().getName()); } }
特定のフォルダの中のファイルをリストする(サブディレクトリは無視)
//GoogleDrive内の特定のフォルダーの中のファイルを取得し、ファイル名をログに出力します。 const folderId = "ここにフォルダIDを入力してね" function listFilesInSpecificFolders() { const folder = DriveApp.getFolderById(folderId); const file = folder.getFiles(); while (file.hasNext()){ Logger.log(file.next().getName()); } }
ファイル一覧をスプレッドシートに書き出す
const spsId = "xxxxxxxxxxx" //スプレッドシートIDを入力してください。 const folderId = "xxxxxxxxx" //フォルダーIDを入力してください。 function dumpFilesListInAFolder() { // const files = DriveApp.getFiles(); const folder = DriveApp.getFolderById(folderId); const files = folder.getFiles() const sps = SpreadsheetApp.openById(spsId); var list = []; while (files.hasNext()){ var file = files.next() list.push([file.getName(),file.getSize()]) } Logger.log(list); sps.getSheets()[0].getRange(1,1,list.length, list[0].length).setValues(list) }
ファイルの種類で抽出する。
getFilesByTypeメソッド
特定のファイルタイプ・拡張子に絞ってファイルを取得するにはgetFilesByTypeメソッドを使用します。
DriveAppに対して検索すると全ファイル検索になります。
特定のフォルダに対して検索することもできます。その場合はサブディレクトの中のファイルはヒットしません。
MimeTypeとは?
利用できるMimeType
MimeTypeは2つの指定方法があるので好きな方を使ってください。
- MimeType.PNGのようにEnumを使う方法
- image/pngのように指定する方法
使用できるMimeTypeのキーワードは下記が参考になります。
MimeType(Enum)
https://developers.google.com/apps-script/reference/base/mime-type
MimeType
https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
ファイルタイプで抽出する(MimeType・拡張子)
pngファイルのみを抽出
//MimeTypeを指定して特定のファイルを抽出します。 //例として下記はpngファイルのみをリストします。 function getPngFile(){ var pngs = DriveApp.getFilesByType(MimeType.PNG); // var pngs = DriveApp.getFilesByType('image/png'); //この書き方でもOk while (pngs.hasNext()) { var png = pngs.next(); Logger.log(png.getName()); } }
Googleスプレッドシートファイルのみを抽出
//MimeTypeを指定して特定のファイルを抽出します。 //例として下記はGoogleスプレッドシートファイルのみをリストします。 function getAllSpreadSheets(){ var sheets = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS); while (sheets.hasNext()) { var sheet = sheets.next(); Logger.log(sheet.getName()); } }
ファイル名や更新日で検索する
searchFilesメソッドの使い方
ファイルを検索するにはsearchFilesメソッドを使用します。
searchFilesメソッドの「検索条件(search criteria)」の書き方は?
検索条件の書き方は、Google Drive SDKで定義されたクエリータームと演算子を使って書きます。使用できるクエリー用語と演算子の詳細は下記をご覧ください。
Google Drive SDKのクエリー用語と演算子
https://developers.google.com/drive/api/guides/ref-search-terms
検索条件はクォーテーションで囲みます。
検索条件全体はクォーテーションで囲まないといけません。そしてその中で演算子と比較する文字列もクォーテーションで囲まないといけません。そこで両者のクォーテーションを区別するために下記のようにシングルクォーテーションとダブルクォーテーションを使い分けます。
▲クエリ条件全体をダブルクォート、テストという文字列をシングルクォートみたいに使い分けします。(逆でも可)
ファイル名で検索する。
//ファイルをファイル名で検索する //下記の例では”テスト”という文字列をファイル名に含むファイルを抽出している。 function Searchfiles1(){ var files = DriveApp.searchFiles("title contains 'テスト'"); while (files.hasNext()) { var file = files.next(); Logger.log(file.getName()); } }
更新日付で検索する。
//ファイルを更新日時で検索する function Searchfiles2(){ var prams = 'modifiedDate >= "2022-03-01" and modifiedDate <= "2022-03-31"' var files = DriveApp.searchFiles(prams); while (files.hasNext()) { var file = files.next(); Logger.log(file.getLastUpdated() + " " + file.getName()); } }
クエリ条件に変数を使って検索する。
//クエリ条件にstrという変数を使ってみる。 function Searchfiles3(){ var str = "見積書"; var prams = "title contains " + "'" + str + "'" Logger.log(prams) var folder = DriveApp.getFolderById(folderId); var files = DriveApp.searchFiles(prams); while (files.hasNext()) { var file = files.next(); Logger.log(file.getLastUpdated() + " " + file.getName()); } }
▲検索条件に変数を使う例
今日、更新されたファイルを検索する。(最終更新日が今日)
//今日更新されたファイルを検索する(最終更新日が今日の日付) function Searchfiles4(){ var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd"); var prams = "modifiedDate >= '" + formattedDate + "'" Logger.log(prams) var files = DriveApp.searchFiles(prams); while (files.hasNext()) { var file = files.next(); // Logger.log(file.getLastUpdated() + " - " + file.getName()); Logger.log(Utilities.formatDate(file.getLastUpdated(), "JST" , "yyyy-MM-dd HH:mm:ss")+ " - " + file.getName()); } }
1月1日から今日までに更新されたファイルを検索する。
//1月1日から今日の日付で更新されたファイルを検索する function Searchfiles5(){ var today = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd"); var prams = "modifiedDate >= '2022-01-01' and modifiedDate <= '" + today + "'" Logger.log(prams) var files = DriveApp.searchFiles(prams); while (files.hasNext()) { var file = files.next(); Logger.log(Utilities.formatDate(file.getLastUpdated(), "JST" , "yyyy-MM-dd HH:mm:ss")+ " - " + file.getName()); } }
検索するときの注意事項
.getFilesByType()もfolder.searchFiles()も、DriveAppに対して使用する場合、全ファイルが検索対象となりますが、特定のフォルダに対して検索を行う場合はそのフォルダ内のみが対象となり、サブフォルダの中のファイルはヒットしません。
特定のフォルダの中のサブフォルダ内も含めたすべてのファイルを取得したり抽出する場合は再帰処理で書かないといけないようです。
関連記事
Googleドライブ・ファイル操作関連の記事
GASのその他の記事
まとめ
以上、Google Apps Scriptのファイル検索・抽出でした。
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
▲Google Apps Scriptの入門書として間違いのない一冊です。ノンプログラマーの方にもわかりやすく解説されています。V8ランライム対応版にアップデート済みため情報も新しいです。
▲こちらGoogle Apps Scriptの本ではないですが、Google Workspace(旧G Suite)を自動化したりアプリ化するには、Google AppSheetという選択肢もあります。Google AppSheetはノーコードでアプリを作成できます。
▲Google for Educationの使い方にとどまらず実際の運用ででてくる問題への対処方法などもかかれていて面白いです。教師の方達の共著なので現実的な内容となっています。