Google Apps ScriptでGoogle Driveのファイル一覧を取得する

Google Apps ScriptでGoogle Driveのファイル一覧を取得する方法です。

Driveのすべてのファイルを取得する

DriveAppクラスgetFiles()メソッドですべてのファイルを取得します。
getFiles()メソッドFileIteratorクラスのオブジェクトを返します。

var files = DriveApp.getFiles();

FileIteratorクラスのオブジェクトを取得したら、hasNext()メソッドで次のFileオブジェクトがあるかどうかを確認して、next()メソッドで次のFileオブジェクトを取得します。

while (files.hasNext()) {
    var file = files.next();
}

Fileオブジェクトを取得したら、getName()メソッドでファイル名を取得できます。

function getDriveFiles() {
    var files = DriveApp.getFiles();
    while (files.hasNext()) {
        var file = files.next();
        Logger.log(file.getName());
    }
}

次のコードは、ファイルの詳細な情報をスプレッドシートに出力します。

function createDriveFileList() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var files = DriveApp.getFiles();
    var row = 1;
    while (files.hasNext()) {
        var file = files.next();
        sheet.getRange(row, 1).setValue(file.getName());
        sheet.getRange(row, 2).setValue(file.getSize());
        sheet.getRange(row, 3).setValue(Utilities.formatDate(file.getDateCreated(), "JST", "yyyy/MM/dd HH:mm:ss"));
        sheet.getRange(row, 4).setValue(Utilities.formatDate(file.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss"));
        sheet.getRange(row, 5).setValue(file.getDescription());
        sheet.getRange(row, 6).setValue(file.getDownloadUrl());
        sheet.getRange(row, 7).setValue(file.getId());
        sheet.getRange(row, 8).setValue(file.getOwner().getName());
        sheet.getRange(row, 9).setValue(file.getUrl());
        row++;
    }
}

Driveのフォルダー内のファイルを取得する

DriveAppクラスgetRootFolder()メソッドはルートのフォルダーのFolderオブジェクトを返します。

Folderオブジェクトは、getFiles()メソッドでフォルダー内のファイル一覧、getFolders()メソッドでフォルダーの一覧を返します。

次のコードはルートフォルダーのフォルダーとファイルをログに出力します。

function getRootFolder() {
    var rootFolder = DriveApp.getRootFolder();

    var folders = rootFolder.getFolders();
    while (folders.hasNext()) {
        var folder = folders.next();
        Logger.log(folder.getName() + "/");
    }

    var files = rootFolder.getFiles();
    while (files.hasNext()) {
        var file = files.next();
        Logger.log(file.getName());
    }
}

次のgetAllFiles()関数は、フォルダーとファイルの階層構造をスプレッドシートに出力します。

function getAllFiles() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var rootFolder = DriveApp.getRootFolder();
    _printFolder(sheet, 1, 1, rootFolder);
}

function _printFolder(sheet, row, col, folder) {
    sheet.getRange(row, col).setValue(folder.getName() + "/");
    row++;

    var folders = folder.getFolders();
    while (folders.hasNext()) {
        var subFolder = folders.next();
        row = _printFolder(sheet, row, col + 1, subFolder);
    }

    var files = folder.getFiles();
    while (files.hasNext()) {
        var file = files.next();
        row = _printFile(sheet, row, col + 1, file);
    }
    return row;
}

function _printFile(sheet, row, col, file) {
    sheet.getRange(row, col).setValue(file.getName());
    return row + 1;
}

Google Apps ScriptでGmailのメールをSpreadsheetに書き出す

Google Apps ScriptでGmailのメールをSpreadsheetに書き出す

受信トレイにあるスレッドを取得する

受信トレイにあるスレッドを取得するには、GmailAppクラスgetInboxThreads()メソッドを使用します。

var threads = GmailApp.getInboxThreads();

getInboxThreads()メソッドGmailThreadオブジェクトの配列を返します。

スレッドからメールを取得する

スレッド内のメールの数はGmailThreadオブジェクトgetMessages()メソッドで取得できます。

Logger.log(thread.getMessageCount());

スレッド内のメールはGmailThreadオブジェクトgetMessages()メソッドで取得します。

getMessages()メソッドは、GmailMessageオブジェクトの配列を返します。

var messages = thread.getMessages();

メールの情報を取得する

GmailMessageオブジェクトのメソッドを使ってメールの情報を取得します。

// 差出人
var from = message.getFrom();
// 宛先
var to = message.getTo();
// 送信日時
var date = message.getDate();
// 件名
var subject = message.getSubject();
// 本文
var body = message.getBody();

GmailのメールをSpreadsheetに書き出す

GmailのメールをSpreadsheetに書き出すコードです。

function getMail() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var threads = GmailApp.getInboxThreads();
    var row = 1;
    for (var i = 0; i < threads.length; i++) {
        var thread = threads[i];
        var messages = thread.getMessages();
        for (var j = 0; j < messages.length; j++) {
            var message = messages[j];
            var from = message.getFrom();
            var to = message.getTo();
            var date = message.getDate();
            var subject = message.getSubject();
            var body = message.getBody();
            sheet.getRange(row, 1).setValue(from);
            sheet.getRange(row, 2).setValue(to);
            sheet.getRange(row, 3).setValue(date);
            sheet.getRange(row, 4).setValue(subject);
            sheet.getRange(row, 5).setValue(body);
            row++;
        }
    }
}

Gmailのスレッドの件名をSpreadsheetに書き出す

Gmailのスレッドの件名をSpreadsheetに書き出すコードです。

function getThreadSubject() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var threads = GmailApp.getInboxThreads();
    for (var i = 0; i < threads.length; i++) {
        sheet.getRange(i + 1, 1).setValue(threads[i].getFirstMessageSubject());
    }
}

Google Apps Scriptでメニューを追加する

Google Apps Scriptでメニューを追加する方法です。

addMenu()を使う方法

SpreadsheetオブジェクトaddMenu()メソッドを使い方法です。

onOpen()関数でドキュメントを開いたときに実行する関数を作成します。

function onOpen(e) {
    ...
}

getActiveSpreadsheet()でアクティブなスプレッドシートのSpreadsheetオブジェクトを取得します。

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

SpreadsheetオブジェクトaddMenu()メソッドでメニューを追加します。

spreadsheet.addMenu("追加メニュー", subMenus);

addMenu()メソッドの引数subMenusは、メニューに表示する名前nameと実行する関数の名前functionNameを持つオ
ブジェクトの配列です。

var subMenus = [
    {name: "追加メニュー1", functionName: "menu1"},
    {name: "追加メニュー2", functionName: "menu2"},
];

全体のコードは次のようになります。

function onOpen(e) {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var subMenus = [
        {name: "追加メニュー1", functionName: "menu1"},
        {name: "追加メニュー2", functionName: "menu2"},
    ];
    spreadsheet.addMenu("追加メニュー", subMenus);
}

function menu1() {
    Logger.log("追加メニュー1");
}
function menu2() {
    Logger.log("追加メニュー2");
}

UiクラスのMenuオブジェクトを使う方法

SpreadsheetオブジェクトgetUi()メソッドでUiオブジェクトを取得します。

var ui = SpreadsheetApp.getUi();

UIクラスcreateMenu()メソッドMenuオブジェクトを作成します。

var menu = ui..createMenu('追加メニュー');

MenuクラスaddItem()メソッドにメニューに表示する名前を実行する関数を指定してメニュー項目を追加します。

menu.addItem('メニュー1', 'myFunction1')

MenuクラスaddSeparator()メソッドでメニューに区切りを追加できます。

menu.addSeparator();

MenuクラスaddSubMenu()メソッドでサブメニューを追加できます。

var subMenu = SpreadsheetApp.getUi().createMenu('サブメニュー');
subMenu.addItem('メニュー2', 'myFunction2');
var subMenu = menu.addSubMenu(subMenu);

最後にaddToUi()メソッドでユーザーインターフェースにメニューを追加します。

menu.addToUi();

全体のコードは次のようになります。

function onOpen(e) {
    var ui = SpreadsheetApp.getUi();
    var menu = ui.createMenu('追加メニュー');
    menu.addItem('メニュー1', 'myFunction1')
    menu.addSeparator();
    var subMenu = SpreadsheetApp.getUi().createMenu('サブメニュー');
    subMenu.addItem('メニュー2', 'myFunction2');
    var subMenu = menu.addSubMenu(subMenu);
    menu.addToUi();
}

addItem()メソッドaddSeparator()メソッドaddSubMenu()メソッドはMenuオブジェクトを返すため、次のようにメソッドチェーンを使って、簡潔に記述することができます。

function onOpen(e) {
    SpreadsheetApp.getUi()
        .createMenu('追加メニュー')
        .addItem('メニュー1', 'myFunction1')
        .addSeparator()
        .addSubMenu(SpreadsheetApp.getUi().createMenu('サブメニュー')
            .addItem('メニュー2', 'myFunction2')
            .addItem('メニュー3', 'myFunction2'))
        .addToUi();
}

Google Apps Scriptを使ってみる(2) Shreadsheet

Spreadsheet

公式ドキュメント

シートを選択する

スプレッドシートのアクティブなシートを取得する。

    var sheet = SpreadsheetApp.getActiveSheet();

すべてのシートを取得する。Sheetオブジェクトの配列が返る。

// すべてのシートの名前をログに出力する
function getSheetNames() {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    sheets.forEach(function(sheet) { Logger.log(sheet.getName()); });
}

シートの情報を得る

シート名・最終列・最終行を取得する

function getSheetInfo() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var name = sheet.getName();
    var lastCol = sheet.getLastColumn();
    var lastRow = sheet.getLastRow();
    Logger.log("シート名:" + name);
    Logger.log("最終列:" + lastCol);
    Logger.log("最終行:" + lastRow);
}

シートのセルの値を取得する

// すべてのシートのA1~B1のセルの値をログに出力する
function getSheetA1B1() {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    sheets.forEach(function(sheet) { Logger.log(sheet.getSheetValues(1, 1, 1, 2)); });
}

セルに値を設定する

function setValue() {
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange(1, 1).setValue("A1");
    sheet.getRange("A2").setValue("A2");
    sheet.getRange(3, 1, 2).setValues([["A3"], ["A4"]]);
}

セルの値を取得する

function getValue() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var a1 = sheet.getRange(1, 1).getValue();
    var a2 = sheet.getRange("A2").getValue();
    var a3_a4 = sheet.getRange(3, 1, 2).getValues();
    Logger.log(a1);
    Logger.log(a2);
    Logger.log(a3_a4);
}

Rangeオブジェクトの情報を取得する

function getRangeProperty() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getRange(1, 2, 3, 4);
    Logger.log("Rangeの左上のセルの列: " + range.getColumn());
    Logger.log("Rangeの左上のセルの行: " + range.getRow());
    Logger.log("Rangeの行数: " + range.getNumColumns());
    Logger.log("Rangeの列数: " + range.getNumRows());
}

ボタンをクリックしてスクリプトを実行する

  1. メニューの「挿入」→「図形描画」を選択して、図形を描画する。

  2. 図形を右クリックして、︙(三点リーダ)をクリック、「スクリプトを割り当て」選択する。

  3. 関数名を入力して「OK」ボタンを押す。

    <img src="https://www.gesource.jp/weblog/wp-content/uploads/2018/02/event02-300x164.png" alt="" width="300" height="164" class="alignnone size-medium wp-image-8130" />
    

ドキュメントを開いたときにスクリプトを実行する

onOpen(event)関数はドキュメントを開いたときに実行される。

function onOpen(event){
    Logger.log("ドキュメントを開きました。");
}

または、次の方法で起動時に実行するトリガーを作成する。

トリガーを作成する

  1. 実行する関数を作成する。
    function onMyOpen(event) {
        Logger.log("ドキュメントを開きました。");
    }
    
  2. メニューの「表示」→「すべてのトリガー」を選択する。

  3. 「トリガーが設定されていません。今すぐついかするにはここをクリックしてください。」をクリックする。

  4. トリガーを設定して「保存」ボタンを押す。