【GAS】GoogleドライブのファイルID・ファイル名・URLを一括で取得する
Google Apps Script(GAS)で特定ファイルを処理する際、場合によってはファイルIDやファイル名で指定しなければなりません。
この記事では、GASを使ってGoogleドライブ上にある指定したフォルダに存在する全てのファイルの情報(ファイルID、ファイル名、URL)を一括で取得する方法を解説します。要件に合わせてファイルタイプやファイル名でも取得可能です。
ファイル情報を一括で取得するコード
まずはコード全体像をお見せして、その後各処理を解説します。
今回は下記のような「スプレッドシート×2」「ドキュメント×1」「スライド×2」が入っているフォルダを想定し、このフォルダ内の全てのファイルの「ID/名前/URL」を取得する処理を実行します。
function getFiles(){
// フォルダの指定
const folderId= '[フォルダID]';
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
const files = folder.getFiles();
//各ファイルごとに出力
while(files.hasNext()){
let file = files.next();
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
let fileURL = file.getUrl(); // ファイルURL
console.log([fileName,fileId,fileURL]);
}
}
[ [ 'プレゼン_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ],
[ 'スプシ_2’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ],
[ 'ドキュメント_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ],
[ 'スプシ_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ]]
フォルダIDを指定
フォルダIDを指定します。対象フォルダのURLを確認し「…/drive/folders/{フォルダID}」がフォルダIDです。
そのまま文字列でfolderIdという定数に格納しておきます。
// フォルダの指定
const folderId= '[フォルダID]';
ID指定したフォルダから全てのファイルを取得
DriveApp.getFolderById(フォルダID)
Folderオブジェクト.getFiles()
getFolderByIdメソッドでフォルダを指定し、getFilesメソッドを使ってフォルダ内の全てのファイルを取得します。
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
const files = folder.getFiles();
わかりやすくflderとfilesで記述を分けましたが、もちろん files = DriveApp.getFolderById(folderId).getFiles() という書き方でも問題ありません。
ファイル数分のループを回す
file.hasnext()は次のファイルがあればtrueを返してくれるので、while構文を組み合わせてファイル数分のループ処理を実行します。
while(files.hasNext()){
let file = files.next();
各ファイルの取得したい情報を指定
ループの中で、各ファイルの「ID/名前/URL」を取得します。
let file = files.next();
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
let fileURL = file.getUrl(); // ファイルURL
ファイル名の取得
Fileオブジェクト.getName()
ファイルIDの取得
Fileオブジェクト.getId()
ファイルURLの取得
Fileオブジェクト.getUrl()
その他取得できるファイル情報は次のパートを参照してください。
指定・取得可能なファイル情報
下記のメソッドを用いて、ファイル名やファイルタイプを指定することが可能です。
メソッド | 説明 |
---|---|
getFilesByType([MIMEタイプ]) | 指定されたMIMEタイプを持つファイル |
getFilesByName(name) | 指定された名前を持つファイル |
getFoldersByName(name) | 指定された名前を持つすべてのフォルダー |
また、取得したファイルから下記のメソッドを用いて情報を取得することが可能です。
メソッド | 説明 |
---|---|
getDateCreated() | Folder作成された日付 |
getDescription() | ファイルの説明 |
getEditors() | 編集者のリスト |
getFolders() | 現在のフォルダー内にあるフォルダー |
getSize() | ファイルのサイズ |
getLastUpdated() | ファイルが最後に更新された日付 |
getParents() | 親フォルダのコレクション |
getName() | ファイル名 |
getId() | ファイルのid |
getUrl() | ファイルのURL |
抽出条件を指定してファイル情報を取得する
ファイルタイプを指定
ファイルタイプを指定する場合はgetFilesByType()メソッドを使います。
スプレッドシートタイプを指定したければ、ファイル情報取得の際にgetFilesByType([MIMEタイプ])とします。
// フォルダの指定
const folderId= '[フォルダID]';
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
//ファイルタイプを指定
const filetype = "application/vnd.google-apps.spreadsheet"; // ここで他のファイルタイプも指定できる
const files = folder.getFilesByType(filetype);
//各ファイルごとに出力
while(files.hasNext()){
let file = files.next();
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
let fileURL = file.getUrl(); // ファイルURL
console.log([fileName,fileId,fileURL]);
}
[ [ 'スプシ_2’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ],
[ 'スプシ_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ]]
指定・取得可能なファイルタイプ
各ファイルタイプの型は"application/vnd.google-apps[ファイルタイプ]“で表現できるので、下記のファイルタイプを指定してあげれば、該当ファイルを抽出できます。
MIMEタイプ | 説明 |
---|---|
application/vnd.google-apps.document | Google Docs |
application/vnd.google-apps.form | Google Forms |
application/vnd.google-apps.presentation | Google Slides |
application/vnd.google-apps.script | Google Apps Scripts |
application/vnd.google-apps.spreadsheet | Google Sheets |
ファイル名を指定
Folderオブジェクト.getFilesByName(ファイル名)
ファイル名指定での取得にはgetFilesByNameメソッドを使います。ファイル内に同じファイル名が一つしかなく、その名前が分かっている場合など、以下方法でIDやURLが取得できます。
// フォルダの指定
const folderId= '[フォルダID]';
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
//ファイルタイプを指定
const fileName = 'スプシ_1'; //取得したいファイル名
const file = folder.getFilesByName(fileName).next();
const fileId = file.getId(); // ファイルID
const fileURL = file.getUrl(); // ファイルURL
console.log([fileName,fileId,fileURL]);
[ 'スプシ_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ]]
ファイル名を正規表現で指定
取得するファイル名を正規表現で指定したい、という場合もあると思います。例えば、毎月の請求書がフォルダ内にあり、年月以外は同じ名称で「yyyy_mm_請求書.pdf」といった形で管理しているときなどです。
ファイル情報を取得する時に正規表現は使えないので、「いったん全てのファイルを取得し、matchメソッドを使って該当するファイル名の時にのみ処理を実行する」と記述すれば実現できます。
下記のサンプルコードでは「スプシ…」となっているファイル名のみを処理しています。
// フォルダの指定
const folderId= '[フォルダID]';
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
//ファイルタイプを指定
const name = /スプシ.*/; //ファイル名が「スプシ…~」となっているファイルが対象
const files = folder.getFiles(); // すべてのファイルを取得
//各ファイルごとに出力
while(files.hasNext()){
let file = files.next();
// ファイル名が「name」でしている正規表現にマッチすれば実行
if(file.getName().match(name)){
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
let fileURL = file.getUrl(); // ファイルURL
console.log([fileName,fileId,fileURL]);
}
}
[ [ 'スプシ_2’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ],
[ 'スプシ_1’,
'……………’,
'https://docs.google.com/presentation/d/……………’ ]]
まとめ
GASを使ってGoogleドライブ内の「指定フォルダ内の全てのファイルの情報(id、名前、URL)を取得する方法」を紹介しました。
- getFolderByIdメソッドで取得したいファイルが入っているフォルダを指定
- getFilesメソッドで全てのファイルを取得
- getName、getId、getUrlメソッドを使って情報を取得する
- ファイルタイプやファイル名で抽出条件を指定することも可能
要件に合わせて、組み合わせて使ってみてください!