Google ドライブでファイル名とリンクの一覧をお手軽に取得する方法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
7 月ですね。夏ですね。
なんやかんやで品質管理の世界に戻ってきたかめです。
その辺りの話はまた機会がある時にでも書きたいと思います。
クラスメソッド は 7 月から新しい期が始まるのですが、私も昨日から会社のさまざまなリスクに対応する危機管理室という部署へ異動し、外部認証取得やナレッジ共有などの品質管理的なお仕事をすることになりました。
仕事柄、共有 Google ドライブには監査法人へ提出する大量のエビデンスや関係するドキュメントなどが保管されているのですが、異動したばかりでどこに何があるのかや、それらがどんなものかを把握できていません。
そこで、ファイルを仕分けするのにファイル名とコメントの一覧を作りたいなーと思ったので、特定の Google ドライブからファイルとフォルダの一覧を作成する GAS を書いてみました。
今回は、この GAS 付スプレッドシートの作り方をご紹介します。
※本記事のスクリプトは akiko-pusu さんの以下の記事で紹介されていたスクリプトをベースとして少し手を加えたものです。
この記事では、非エンジニアの方でも作成できるような手順を書いていますので、とにかくコードが知りたいという方は、 akiko-pusu さんの記事をおすすめします。
Google Drive上の指定のフォルダ以下のファイル一覧をSpreadSheetに書き出す | Qiita
作り方
用意するもの
- Google アカウント
- BGM : こめかみパンチングなあの曲
作成手順
- Web ブラウザから Google アカウントへログインし、Google ドライブを開きます
- [新規] - [ Google スプレッドシート ]をクリックします
- スプレッドシートが表示されたら、適当なスプレッドシート名を入力します
シート 1は、A1にファイル名、B1にリンク と入力し、A 列とB 列に罫線を引きます- 新しいシートを挿入し、シート名を
configとします configシートのA1にフォルダ ID と入力し、B1の色を変えます- スプレッドシートの [ツール] - [スクリプトエディタ] をクリックします
- 表示された画面で画面左上の「無題のプロジェクト」をクリックします
- 表示されたダイアログで適当なプロジェクト名を設定し、[OK]ボタンをクリックします
- [コード.gs ]に以下を貼り付けます
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
function getListInFolder() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var confSheet = ss.getSheetByName('config'); var sheetName = ss.getSheetByName('シート1'); var lastRow = sheetName.getLastRow(); var lastCol = sheetName.getLastColumn(); var rangeList = sheetName.getRange(2, 1, lastRow, lastCol); var folder_id = confSheet.getRange("B1").getValue(); var url = 'https://drive.google.com/drive/folders/' + folder_id; var paths = url.split('/'); // Separate URL into an array of strings by separating the string into substrings var folderId = paths[paths.length - 1]; var folder = DriveApp.getFolderById(folderId); var childFolders = folder.getFolders(); var files = folder.getFiles(); var list = []; var rowIndex = 2; var colIndex = 1; // 初期化処理 rangeList.clearContent(); while(files.hasNext()) { var buff = files.next(); list.push([buff.getName(), buff.getUrl()]); }; while(childFolders.hasNext()) { var buff = childFolders.next(); list.push([buff.getName(), buff.getUrl()]); }; range = sheetName.getRange(rowIndex, colIndex, list.length, list[0].length); // 対象の範囲にまとめて書き出します range.setValues(list); } function onOpen(){ var menu=[ {name: "ファイル一覧を取得", functionName: "getListInFolder"} ]; SpreadsheetApp.getActiveSpreadsheet().addMenu("コマンド",menu); //メニューを追加 } - [保存]アイコンをクリックします
動作確認
- スクリプトエディタの[実行する関数を選択]プルダウンから onOpen を選択します
- [実行]アイコンをクリックします
- Google の認証画面が表示された場合、承認します
- 以下のような警告が表示された場合、左下の
詳細をクリックして表示されたプロジェクト名(安全ではないページ)へ移動をクリックし、要求される権限内容を確認して承認します
- 以下のような警告が表示された場合、左下の
- 実行ログが「実行完了」になっていることを確認します
- スプレッドシートに戻り、
configシートのB1セルに一覧を取得したい Google ドライブのフォルダ IDを入力しますフォルダ IDは、 URL のfolders以降の部分です(この図の ID は実在しません)
- スプレッドシートのツールバーから [コマンド] - [ファイル一覧を取得] をクリックします
-
「スクリプトが終了しました」というメッセージが表示されたら
シート 1に対象のフォルダの一覧が作成されているか確認します- ちなみに、今回のテスト用フォルダの中身はこんな感じです
- ちなみに、今回のテスト用フォルダの中身はこんな感じです
一覧が作成できていれば完成です!
使い方
- スプレッドシート
configシートのB1セルに一覧を取得したフォルダのフォルダ IDを入力します - ツールバーの [コマンド] - [ファイル一覧を取得] をクリックします
シート1に必要な情報が作成されているので、シート名のプルダウンから [別のワークブックにコピー] - [ 新しいスプレッドシート] を選択して、データを移動します
このように使うと繰り返し利用することができます。
おまけ
このファイルを部内に共有したところ、「サブフォルダに対して再帰的な処理もできる?」という声があり、 OTAZOMAN さんの以下の記事を見つけました。
GASでGoogleDriveのサブフォルダとファイル一覧を出力する | オーバーフォーティーおやじログ
6 分の壁はあるのですが、私の環境ではこのまま利用できたのと、ファイル数が多くてもこちらをベースに工夫すれば目的のデータが取得できると思います。
Special Thanks(参考サイト)
Google Drive上の指定のフォルダ以下のファイル一覧をSpreadSheetに書き出す | Qiita
GASでGoogleDriveのサブフォルダとファイル一覧を出力する | オーバーフォーティーおやじログ