Google Apps Scriptとは?
Google Apps Script(GAS)は、Googleが提供するJavaScriptベースのスクリプト言語です。
Gmailやスプレッドシート、Google DriveなどのGoogleアプリを連携させ、自動化や業務効率化が可能です。
開発環境が不要で、ネット環境があれば簡単に始められるのが特徴です。
Google Apps Scriptで何ができるの?
GASでは、さまざまなサービスと組み合わせて、業務の効率化が図れます。
例えば、定期的に特定の情報を取得し、スプレッドシートに保存したり、Webアプリケーションの開発を行ったりすることが可能です。
しかし、GASは万能ではないので、できないこともあります。
例えば、特定の大容量ファイルの使用や、ブラウザを操作する処理はできません。
GASを使ってフォルダ一覧をスプレッドシートに作る
今回は、Google Driveの特定のフォルダ内のすべてのファイルとサブフォルダをリストアップし、その情報をGoogleスプレッドシートに書き込むコードを紹介します。
このコードは、スプレッドシートの内容をクリアし、フォルダ内のすべてのファイルとサブフォルダの情報を取得してスプレッドシートに書き込むupdateFilesInFolder関数と、指定したフォルダ内のすべてのファイルとサブフォルダを再帰的に処理するprocessFolder関数から成り立っています。
function updateFilesInFolder() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 使用するスプレッドシートを取得
var sheet = spreadsheet.getSheetByName('シート名'); // データを書き込むシートを取得(必要に応じて名前を変更)
sheet.clear(); // スプレッドシートの内容をクリア
var folderId = 'フォルダのID'; // 処理するフォルダのIDを指定
var folder = DriveApp.getFolderById(folderId);
var data = [];
var maxIndent = processFolder(folder, data, '', 1);
// インデントレベルが最大の場合、他のすべての行をその数に合わせてパディング
data.forEach(function(row) {
while (row.length < maxIndent) {
row.push('');
}
});
// データをバッチ処理で書き込む
var range = sheet.getRange(1, 1, data.length, data[0].length);
range.setValues(data);
}
function processFolder(folder, data, prefix, indentLevel) {
var files = folder.getFiles();
var folders = folder.getFolders();
var maxIndent = indentLevel;
// フォルダ内のすべてのファイルの情報を処理
while (files.hasNext()) {
var file = files.next();
var row = [];
row[indentLevel - 1] = '=HYPERLINK("' + file.getUrl() + '", "' + prefix + file.getName() + '")';
data.push(row);
}
// フォルダ内のすべてのサブフォルダを処理
while (folders.hasNext()) {
var subfolder = folders.next();
var row = [];
row[indentLevel - 1] = '=HYPERLINK("' + subfolder.getUrl() + '", "' + prefix + subfolder.getName() + '")';
data.push(row);
var indent = processFolder(subfolder, data, prefix + subfolder.getName() + '/', indentLevel + 1); // サブフォルダを一つインデントする
if (indent > maxIndent) {
maxIndent = indent;
}
}
return maxIndent;
}
updateFilesInFolder関数
まず、updateFilesInFolder関数を見てみましょう。
この関数は、指定したGoogleスプレッドシートの内容をクリアし、特定のGoogle Driveフォルダ内のすべてのファイルとサブフォルダの情報を取得してスプレッドシートに書き込みます。
function updateFilesInFolder() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 使用するスプレッドシートを取得
var sheet = spreadsheet.getSheetByName('クライアント'); // データを書き込むシートを取得(必要に応じて名前を変更)
sheet.clear(); // スプレッドシートの内容をクリア
var folderId = '0AGHo2QiIjtJwUk9PVA'; // 処理するフォルダのIDを指定
var folder = DriveApp.getFolderById(folderId);
var data = [];
var maxIndent = processFolder(folder, data, '', 1);
// インデントレベルが最大の場合、他のすべての行をその数に合わせてパディング
data.forEach(function(row) {
while (row.length < maxIndent) {
row.push('');
}
});
// データをバッチ処理で書き込む
var range = sheet.getRange(1, 1, data.length, data[0].length);
range.setValues(data);
}
processFolder関数
次に、processFolder関数を見てみましょう。
この関数は、指定したフォルダ内のすべてのファイルとサブフォルダを再帰的に処理します。
各ファイルとサブフォルダのURLと名前を取得し、それらをスプレッドシートの行として追加します。
サブフォルダが存在する場合、そのサブフォルダ内のすべてのファイルとサブサブフォルダも同様に処理します。
function processFolder(folder, data, prefix, indentLevel) {
var files = folder.getFiles();
var folders = folder.getFolders();
var maxIndent = indentLevel;
// フォルダ内のすべてのファイルの情報を処理
while (files.hasNext()) {
var file = files.next();
var row = [];
row[indentLevel - 1] = '=HYPERLINK("' + file.getUrl() + '", "' + prefix + file.getName() + '")';
data.push(row);
}
// フォルダ内のすべてのサブフォルダを処理
while (folders.hasNext()) {
var subfolder = folders.next();
var row = [];
row[indentLevel - 1] = '=HYPERLINK("' + subfolder.getUrl() + '", "' + prefix + subfolder.getName() + '")';
data.push(row);
maxIndent = Math.max(maxIndent, processFolder(subfolder, data, prefix + subfolder.getName() + ' / ', indentLevel + 1));
}
return maxIndent;
}
まとめ
Google Apps Scriptを使えば、Googleの各種サービスを連携させて業務の効率化を図ることが可能です。
今回紹介したコードは一例ですが、自分の業務に合わせてカスタマイズすることで、より効率的な業務運営が可能になります。