LoginSignup
2

More than 1 year has passed since last update.

40 代おっさん GASのフォルダ・ファイルのコレクションを操作する

Posted at

本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

フォルダ・ファイルをコレクションとして取得する

ファイル・フォルダをコレクションとして取得するメソッドが用意されている。

ファイル・フォルダのコレクションを取得するメソッド

メソッド 説明 DriveApp Folder
getFiles() すべてのファイル   〇  〇
getFolders() すべてのフォルダ   〇  〇
getFilesByName(name) 該当するファイル名のファイル   〇  〇
getFoldersByName(name) 該当するフォルダ名のフォルダ   〇  〇
getFilesByType(mimeType) 該当するMIMEのフォルダ   〇  〇
getTrashedFiles() ゴミ箱内のファイル   〇
getTrashedForders() ゴミ箱内のフォルダ   〇
searchFiles(params) 検索条件に一致したファイル   〇  〇
searchFolders(params) 検索条件に一致したフォルダ   〇  〇

これらのメソッドを取得できるのは
FolderIteratorオブジェクト
FileIteratorオブジェクト
と呼ばれるもので、フォルダ・ファイルのコレクションになる
操作を行うには、コレクションから個々のオブジェクトを取り出す必要がある。

フォルダ・ファイルのコレクションの反復処理

FolderIteratorクラス・FileIteratorクラスとは
フォルダとファイルのコレクションを操作する機能を提供する物

FolderIteratorクラス・FileIteratorクラスの主なメンバ

メンバ 戻り値 説明
hasNext() Boolean||次のフォルダまたはファイルが存在するかを判定する
next() Folder/File||次のフォルダまたはファイルを取得する

nextメソッドは、フォルダ・ファイルのコレクションについての反復処理において、取り出していないフォルダ・ファイルを取り出す。

構文

FolderIteratorオブジェクト.next()
FileIteratorオブジェクト.next()

フォルダ・ファイルが見つからない場合、例外がスローされる。
それを防ぐためにフォルダ・ファイル存在するか判定する。
hasNextメソッドを使用

構文

FolderIteratorオブジェクト.hasNext()
FileIteratorオブジェクト.hasNext()

お試し

function tosiki() {
  const id     = '1BxF2vAvoSvfc9mEpaOIt6mPT37BMeHSV';
  const targetFolder = DriveApp.getFolderById(id);

  const subFolders = targetFolder.getFolders();
  while (subFolders.hasNext()) {
    const folder =subFolders.next();
    console.log(folder.getName());
  }
}

while文でhasNextを条件式にすれば例外を出すことなく実施できる。

MIMEタイプによりファイルを取得する

MIMEタイプとは
ファイルの形式を識別するためのコード体系

Googleドライブ内または、フォルダ内から特定のMIMEタイプのファイルコレクションを収得するには
getFilesByTypeを使用

構文

DriveApp.getFilesByType(MIMEタイプ)
Folderオブジェクト.getFilesByType(MIMEタイプ)

文字列表記を指定して用いることもできるが、EnumとしてEnum MimeTypeが用意されている。

構文

Enum名.プロパティ

*Enum MimeTypeのプロパティの図は、参考資料の本を見ていただくか、ネットで調べください。

ちなみにこちらで書いてありました。
https://hirachin.com/post-4364/

お試し

function tosiki() {
  const id           = '****************';
  const targetFolder = DriveApp.getFolderById(id);

  const files = targetFolder.getFilesByType(MimeType.PLAIN_TEXT);
  while(files.hasNext()) {
    const file = files.next();
    console.log(file.getName());
  }
}

検索によりファルダ・ファイルを取得する

searchFordersメソッド
searchFilesメソッド
を使うことでGoogleドライブ内またはフォルダ内を特定の条件で検索できる。

構文(searchFordersメソッド)

DriveApp.searchForders(検索条件)
Folderオブジェクト.searchForders(検索条件)

構文(searchFilesメソッド)

DriveApp.searchFiles(検索条件)
Folderオブジェクト.searchFiles(検索条件)

検索条件の主なフィールド

プロパティ 説明
title string 名前
fullText string 名前,説明,内容及びインデックス可能なすべてのテキスト
mimeType string MIMEタイプ
trashed boolean ゴミ箱にあるかどうか
starred boolean スターが付与されているかどうか
parents collection 親フォルダのフォルダIDのコレクション

検索条件に使用する演算子

演算子 説明
contains 文字列が含まれている
  = 等しい
  != 等しくない
  in 要素がコレクション内に含まれている
  and かつ
  or または
  not 否定

お試し

function tosiki() {
  const params = 'title contains "to" and starred = true';

  const files = DriveApp.searchFiles(params);
  while(files.hasNext()) {
    const file = files.next();
    console.log(`${file.getName()}:${file.getMimeType()}`);
  }
}

参考資料

https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Google-Apps-Script%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88/dp/4798064742

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2