'24/04/16更新:メニューバーから実行できるボタン追加のコードを追記しました。
本記事では、スプレッドシートを置いたカレントフォルダ以下を再帰的に探索して、ファイル一覧を書き出すGoogel App Script(GAS)の雛形コードを載せました。
下図は、本プログラムをApps Scriptに記載したスプレッドシートです。メニューバーの赤枠に「Custum Menu」が出現しているのがわかります。
下図は、上記ボタンを実行した結果です。A列にファイルパス、B列にそのタイプ(フォルダ or ファイル)、C列から右側の列には各ファイルパスの各階層を入力する仕様です。
これにて、フォルダ内のファイル一覧が見やすくなります。また、A列にはリンクを貼っているので、所望のフォルダやファイルを見つければそこへ飛ぶことが容易にできます。
■本プログラム
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Custom Menu');
menu.addItem('実行', 'listFolderAndFileHierarchyFromSheetFolder');
menu.addToUi();
}
function listFolderAndFileHierarchyFromSheetFolder() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
sheet.appendRow(["フォルダパス", "タイプ"]);
var scriptFile = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId());
var parentFolder = scriptFile.getParents().next();
listFolderAndFileHierarchyRecursive(parentFolder, "", sheet);
}
function listFolderAndFileHierarchyRecursive(folder, parentPath, sheet) {
var folders = folder.getFolders();
while (folders.hasNext()) {
var subFolder = folders.next();
var folderPath = parentPath + "/" + subFolder.getName();
sheet.appendRow([folderPath, "Folder"]);
var row = sheet.getLastRow();
var col = 1;
sheet.getRange(row, col).setFormula('=HYPERLINK("' + encodeURI("https:
var pathParts = folderPath.split("/");
for (var i = 1; i < pathParts.length; i++) {
if (!sheet.getRange(row, i + 2).getValue()) {
sheet.getRange(1, i + 2).setValue("階層" + i);
}
sheet.getRange(row, i + 2).setValue(pathParts[i]);
}
listFolderAndFileHierarchyRecursive(subFolder, folderPath, sheet);
}
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var filePath = parentPath + "/" + file.getName();
sheet.appendRow([filePath, "File"]);
var row = sheet.getLastRow();
var col = 1;
sheet.getRange(row, col).setFormula('=HYPERLINK("' + encodeURI(file.getUrl()) + '","' + filePath + '")');
var pathParts = filePath.split("/");
for (var i = 1; i < pathParts.length; i++) {
if (!sheet.getRange(row, i + 2).getValue()) {
sheet.getRange(1, i + 2).setValue("階層" + i);
}
sheet.getRange(row, i + 2).setValue(pathParts[i]);
}
}
}
以上
<広告>
リンク
リンク