概要
Google Driveのフォルダ内にある複数のスプレッドシートを1つのGoogle Apps Script(GAS)でお手軽に監視できるのかが気になり、試験的に作成してみました。
大量のスプレッドシートを監視したいけど、各々のシートに対してGASを作成するのは辛いな...という方のお役に立てるかも?
今回紹介するGASを活かすには以下条件があります。ご注意ください
- 対象スプレッドシートを特定のGoogle Driveで管理している
全体の流れ
以下の流れで記事を進めていきます。
1.GASの作成
2.GASのトリガー設定
3.動作確認
GASの作成
GAS内で指定しているSlack Webhookは公式ドキュメントを参照し設定をしています。
※本記事では詳細な手順は割愛します。
GASのコードは以下です。
今回は15分以内に更新されたスプレッドシート名と更新者のメールアドレスを通知します。
var SLACK_WEBHOOK_URL = // Slack Webhook URLを指定
function notifyRecentChanges() {
var folderId = //フォルダIDを指定や共有ドライブIDを指定
var folder = DriveApp.getFolderById(folderId);
// フォルダ内のすべてスプレッドシート情報を取得
var files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
var now = new Date();
// 15分前の日時を取得
var fifteenMinutesAgo = new Date(now.getTime() - 15 * 60 * 1000);
// 各ファイルの最終更新日時をチェック
while (files.hasNext()) {
var file = files.next();
var lastUpdated = file.getLastUpdated();
if (lastUpdated > fifteenMinutesAgo) {
var spreadsheet = SpreadsheetApp.open(file);
var user = Session.getActiveUser().getEmail();
var message = {
text: 'スプレッドシートが更新されました',
attachments: [
{
title: '更新されたスプレッドシート',
title_link: spreadsheet.getUrl(),
text: '更新者: ' + user + '\nスプレッドシート名: ' + spreadsheet.getName(),
color: '#36a64f'
}
]
};
// Slack通知
sendSlackNotification(message);
}
}
}
function sendSlackNotification(message) {
var options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
使用しているAPPの公式ドキュメントは以下です。
DriveApp
SpreadsheetApp
GASのトリガー設定
15分以内に更新されたスプレッドシート名と更新者のメールアドレスを通知したいので、
GASコンソールで「トリガー」 > 「トリガーを追加」を選択し、トリガー作成をします。
以上で完了です。動作確認してみます。
動作確認
今回使用している検証用スプレッドシートは以下です。
予め、特定のフォルダにまとめて格納しておきます。
各々スプレッドシートを修正してみます。
※ほぼ連続で修正しました
→ Slack通知されました。
今度は、sample1だけを修正してみます。
→ sample1だけがSlack通知されました。
以上です。
共有ドライブや共有フォルダで管理していれば、1つのGASでスプレッドシートをお手軽に監視することができました。
トリガー設定も柔軟にできるので便利ですね。