GASでマイドライブ内の構造をスプレッドシートに出力してみた.ver2
マイドライブ内の構造をスプレッドシートに書き出す
以前にも作ったコードを修正しました。ファイル名にハイパーリンクを埋め込み、カーソルがファイル名の上に置くとプレビューが表示されます。
フォルダの色も階層によって変化します。薄いほど下の階層です。
出来上がりが以下の画像です。IDは隠しています。
GASとは
GASは簡単に言えばグーグルが提供しているプログラミング言語です。無料で利用できます。
フォルダ内一覧表示のサンプルコード
GASをある程度知っている方…下のコードをコピペすれば完了です。
GASをあまりよく分からない方…コードの下に説明を詳しく入れています。ご参照ください。
function ドライブ内表示() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('マイドライブ内表示シート') || SpreadsheetApp.getActiveSpreadsheet().insertSheet('マイドライブ内表示シート');
sheet.clear(); // シートをクリア
// シートのヘッダー設定
sheet.getRange("A1:F1").setValues([["作成日時", "更新日時", "名前", "種類", "ファイルサイズ", "ID"]]);
// 列幅の設定
sheet.setColumnWidth(1, 130); // C列の幅を150に設定
sheet.setColumnWidth(2, 130); // C列の幅を150に設定
sheet.setColumnWidth(3, 200); // C列の幅を150に設定
sheet.setColumnWidth(4, 150); // D列の幅を150に設定
sheet.setColumnWidth(6, 380); // F列の幅を380に設定
// マイドライブのルートフォルダを取得
const rootFolder = DriveApp.getRootFolder();
let row = 2;
// マイドライブ内のファイルとフォルダを取得
row = listFolderContents(rootFolder, sheet, row, 'マイドライブ', true, 0);
}
// フォルダ内の内容をリスト
function listFolderContents(folder, sheet, row, folderName, isRoot = false, depth = 0) {
const files = [];
const folders = [];
const folderIterator = folder.getFolders();
const fileIterator = folder.getFiles();
while (folderIterator.hasNext()) folders.push(folderIterator.next());
while (fileIterator.hasNext()) files.push(fileIterator.next());
folders.sort((a, b) => b.getLastUpdated() - a.getLastUpdated());
files.sort((a, b) => b.getLastUpdated() - a.getLastUpdated());
// ルートフォルダの場合は、フォルダ情報
if (isRoot) {
const range = sheet.getRange(row, 1, 1, 6);
range.setValues([[
formatDate(folder.getDateCreated()),
formatDate(folder.getLastUpdated()),
folderName,
"", "", folder.getId()
]]);
range.setBackground(getFolderColor(depth));
// 名前にハイパーリンクを追加
const nameRange = sheet.getRange(row, 3);
nameRange.setValue(`=HYPERLINK("${folder.getUrl()}", "${folderName}")`);
row += 1;
}
// ルートフォルダ内のファイル
files.forEach(file => {
const range = sheet.getRange(row, 1, 1, 6);
range.setValues([[
formatDate(file.getDateCreated()),
formatDate(file.getLastUpdated()),
file.getName(),
file.getMimeType(),
file.getSize(),
file.getId()
]]);
// ファイルの背景色を白
range.setBackground("#FFFFFF");
// 名前にハイパーリンク
const nameRange = sheet.getRange(row, 3);
nameRange.setValue(`=HYPERLINK("${file.getUrl()}", "${file.getName()}")`);
row += 1;
});
// サブフォルダとその内容
folders.forEach(subFolder => {
const range = sheet.getRange(row, 1, 1, 6);
range.setValues([[
formatDate(subFolder.getDateCreated()),
formatDate(subFolder.getLastUpdated()),
subFolder.getName(),
"", "", subFolder.getId()
]]);
range.setBackground(getFolderColor(depth + 1)); // 子フォルダの深さを1増やして色を取得
// 名前にハイパーリンク
const nameRange = sheet.getRange(row, 3);
nameRange.setValue(`=HYPERLINK("${subFolder.getUrl()}", "${subFolder.getName()}")`);
row += 1;
// サブフォルダ内のファイルを先に書き込み、次にサブフォルダ
row = listFolderContents(subFolder, sheet, row, subFolder.getName(), false, depth + 1);
});
return row;
}
// 日付を指定した形式でフォーマット
function formatDate(date) {
return Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm:ss');
}
// フォルダの深さに応じた色
function getFolderColor(depth) {
switch (depth) {
case 0: return "#FF6600"; // マイドライブ
case 1: return "#FF9966"; // 1つ下のフォルダ
case 2: return "#FFFF99"; // 2つ下のフォルダ
case 3: return "#FFEE66"; // 3つ下のフォルダ
case 4: return "#FFDD33"; // 4つ下のフォルダ
default: return "#FFCC00"; // 5つ以上下のフォルダ
}
}
GASの基本から
Dドライブにアクセスして、スプレッドシートを開きます。
拡張機能からAppScriptを選択します。
下のような画面が出てきたら、function myfunctionと書かれている部分をすべて消します。
次に上記のコードをすべて選択して貼り付けます。
保存を押し、実行を押します。
以下、赤印で囲んだところを選択
実行ログに実行完了と表示されたら、スプレッドシートを見て下さい。
完成です。
備考
最大5層下までのフォルダを色付けする設定です。