ごすけ(@Gosuke5111)です。
今回は、Google Apps Script(GAS)を使ってGoogleドライブにある特定フォルダ内のフォルダ名・ファイル名・URLを取得してスプレッドシートに書き出す方法をご紹介します。
社長に『Googleドライブのフォルダにあるファイルをスプシに書き出して、更新があったものをメールで通知するようなGASを作ってほしい』と言われて作りました。
が、、、ちょっと躓きました。
フォルダーの取得とファイルの取得って、別の関数を使うみたいですね。
その備忘録も込めて、フォルダ・ファイル名を取得するGASコードを教えたいと思います。
- Googleドライブに作成しているフォルダ・ファイル名・URLを取得するGASの紹介
- GAS構築時に躓いたポイント
ではさっそくスプレッドシートの準備とGASコードをご紹介します。
スプレッドシートの準備
まずはスプレッドシートの準備から。
以下のようなスプシを作りました。

1行目に検索したいフォルダIDを入力します。
4行目以降にフォルダ内で検索したファイル・フォルダを書き出すようにしました。
シート名は『子フォルダ』までとしています。
構成は以下の通りです。
| 1列目 | 2列目 | 3列目 | 4列目 |
|---|---|---|---|
| 区分 | フォルダ・ファイル名 | URL | 最終更新日 |
| フォルダかファイルを区別 | フォルダ・ファイルに付けられている名称 | 割り当てられているリンク | 最後に更新された日付 |
GASコードの全体像
次にGoogle Apps Script(GAS)のコード紹介です。
GASコード全体像
次にGoogle Apps Scriptのコードです。まずは全体像から。
function getFoldersAndFiles() {
rowIndex = 4; // 書き出しのスタート行
colIndex = 1; // 書き出しのスタート列
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('子フォルダまで'); //スプシの名称を記入
let lastRow = sheet.getLastRow();
let lastColumn = sheet.getLastColumn();
if(lastRow > rowIndex){
sheet.getRange(rowIndex,colIndex,lastRow-rowIndex+1,lastColumn-colIndex+1).clearContent();
}
const folderId = sheet.getRange(1,2).getValue();
const folder = DriveApp.getFolderById(folderId);
let newArray = []; //取得したフォルダ・ファイル名を保存する用
//フォルダ名の取得
const folders = DriveApp.getFolderById(folderId).getFolders();
while(folders.hasNext()){
const childFolder = folders.next();
var folderName = childFolder.getName();
var folderUrl = childFolder.getUrl()
lastUpdatedDate = Utilities.formatDate(childFolder.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss");
newArray.push(["フォルダ",folderName, folderUrl, lastUpdatedDate]);
}
//ファイル名の取得
const files = folder.getFiles();
let filesArray = [];
while(files.hasNext()){
let file = files.next();
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
let fileURL = file.getUrl(); // ファイルURL
let upDatedDay = Utilities.formatDate(file.getLastUpdated(),"JST", "yyyy/MM/dd HH:mm:ss")
newArray.push(["ファイル",fileName,fileURL,upDatedDay]);
}
sheet.getRange(rowIndex, colIndex, newArray.length, newArray[0].length).setValues(newArray);
}各コードの解説
各コードについて解説します。
初期設定
rowIndex = 4; // 書き出しのスタート行
colIndex = 1; // 書き出しのスタート列
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('子フォルダまで'); //スプシの名称を記入この部分では、情報を書き出すスプレッドシートの設定を行います。
rowIndex と colIndex により、どの行・列からデータを書き出すかを指定します。
例えば、4行目1列目から書き出しを開始する設定です。
また、spreadsheet と sheet 変数を使って、現在のアクティブなスプレッドシートと特定のシート(この場合は「子フォルダまで」)を取得します。
シートのクリア処理
let lastRow = sheet.getLastRow();
let lastColumn = sheet.getLastColumn();
if(lastRow > rowIndex){
sheet.getRange(rowIndex, colIndex, lastRow - rowIndex + 1, lastColumn - colIndex + 1).clearContent();
}シート内のデータが残っている場合に備えて、開始行より下に存在するデータをクリアします。
lastRow はシートの最終行、lastColumn は最終列を取得します。
もし最終行が rowIndex より大きい場合は、その範囲をクリアしています。
フォルダの取得と初期化
const folderId = sheet.getRange(1, 2).getValue();
const folder = DriveApp.getFolderById(folderId);
let newArray = []; //取得したフォルダ・ファイル名を保存する用スプレッドシートの特定のセルに保存されているフォルダIDを取得し、そのフォルダを操作するために DriveApp.getFolderById(folderId) を使用します。
また、後でフォルダやファイルの情報を格納するための配列 newArray を初期化します。
子フォルダの情報取得
const folders = DriveApp.getFolderById(folderId).getFolders();
while (folders.hasNext()) {
const childFolder = folders.next();
var folderName = childFolder.getName();
var folderUrl = childFolder.getUrl();
lastUpdatedDate = Utilities.formatDate(childFolder.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss");
newArray.push(["フォルダ", folderName, folderUrl, lastUpdatedDate]);
}指定されたフォルダ内に存在する子フォルダをループ処理で取得し、それぞれのフォルダ名、URL、最終更新日時を取得します。その情報を配列 newArray に追加していきます。
ファイルの情報取得
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
let upDatedDay = Utilities.formatDate(file.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss")
newArray.push(["ファイル", fileName, fileURL, upDatedDay]);
}フォルダ内のファイル情報を取得しています。
フォルダの時と同様に、ファイル名、URL、最終更新日時を取得し、配列 newArray に追加します。
スプレッドシートへの書き込み
sheet.getRange(rowIndex, colIndex, newArray.length, newArray[0].length).setValues(newArray);最後に、newArray に保存されたフォルダおよびファイル情報をスプレッドシートに一括で書き出します。
これにより、指定された位置からフォルダやファイルのリストが自動的に記録されます。
躓いたポイント
今回躓いたのは以下の2つです。
- フォルダ名の取得は『getFolders()』を使用する
- ファイル名の取得は『getFiles()』を使用する
ずっと『getFolders()』を使っていて、「なんでファイルの方は取れんのや!!」と悶々としていました。
ファイル系(スプシ・ドキュメント・PDFなど)は『getFiles()』を使うようです。
なので、先ほどご紹介したGASコードは
- 最初に特定フォルダに入っている「フォルダ」を検索する
- その後、特定フォルダに入っている「ファイル」を検索する
この順番で書き出すことで、フォルダもファイルも取得できるようになりました。
まとめ
Google Apps Script(GAS)を使ってGoogleドライブにある特定フォルダ内のフォルダ名・ファイル名・URLを取得してスプレッドシートに書き出す方法をご紹介しました。
フォルダの取得は『getFolders()』
ファイルの取得は『getFiles()』
この2つを忘れないように記事にしたいと思います。
以上、ごすけでした。


