Googleカレンダー便利ですよね。
でもヘビーユーザだと予定を入れまくりすぎて、あの予定いつだったっけ?とかってなることないですか?
予定がいっぱい入りすぎているとどこに入れてたっけ?っとなり見つからなくてイライラ。
探すのに時間がかかってしまうということがありました。
なので今回は、GASを使ってGoogleカレンダーの情報を検索してスプレッドに書き込む方法についてです。
まずは作ったものの仕様から。
今回は、カレンダーID(メールアドレス)、キーワード、何日前から、何日後までという情報を入力して、カレンダーのタイトルか、説明にキーワードに引っかかった結果をスプレッド上に書き込むという仕様です。
コードを登録して、スプレッドを開くとメニューというのが一番右にでます。
メニュー。
マウスを上に乗せると、カレンダーの予定を出力すると出るのでクリックすると実行されます。
カレンダーIDかgメールのアドレスを入力します。
検索したいキーワードを入力します。
何日前から検索するか、入力します。
何日後まで検索するか、入力します。
結果は次のようになります。1件しか引っ掛からなかったので1件しか出てませんが、普通に複数件でます。
入力チェックとかしていないので、変な入力すると多分動かないです。
ある程度正しい入力で使ってください。
では、ソースコードを全文載せます。
コピペして貼り付けてもらったら、そのまま使えます。
最初のカレンダーID(メールアドレス)の入力がめんどくさい人はソースを修正して固定で入れてください。
function onOpen() { const ui = SpreadsheetApp.getUi() const menu = ui.createMenu('メニュー'); menu.addItem('カレンダーの予定を出力する', 'getCalenderEvent'); menu.addToUi(); } function getCalenderEvent() { const ui = SpreadsheetApp.getUi(); //アクティブなスプレッドシート、シートを取得 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // カレンダーIDの入力 let response = ui.prompt('メールアドレスもしくはカレンダーIDを入力してください', ui.ButtonSet.OK_CANCEL); // キャンセル時はスクリプトを終了する if (response.getSelectedButton() == ui.Button.CANCEL) { return; } // カレンダーIDを取得する let calendarId = response.getResponseText(); // キーワードの入力 let response2 = ui.prompt('キーワード', ui.ButtonSet.OK_CANCEL); // キャンセル時はスクリプトを終了する if (response2.getSelectedButton() == ui.Button.CANCEL) { return; } // カレンダーIDを取得する let keyword = response2.getResponseText(); // キーワードの入力 let response3 = ui.prompt('何日前から', ui.ButtonSet.OK_CANCEL); // キャンセル時はスクリプトを終了する if (response3.getSelectedButton() == ui.Button.CANCEL) { return; } // 過去日を取得する let beforeDay = response3.getResponseText(); // 未来日の入力 let response4 = ui.prompt('何日後まで', ui.ButtonSet.OK_CANCEL); // キャンセル時はスクリプトを終了する if (response4.getSelectedButton() == ui.Button.CANCEL) { return; } // 未来日を取得する let futureDay = response4.getResponseText(); //カレンダーのIDを指定して、Googleカレンダーを取得する let myCalendar = CalendarApp.getCalendarById(calendarId); let now = new Date(); let startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - beforeDay); let endDate = now; endDate.setDate(startDate.getDate() + futureDay); //開始日~終了日に存在するGoogleカレンダーのイベントを取得する let myEvent = myCalendar.getEvents(startDate, endDate); // 結果格納用の配列 let result = []; //forループの処理で取得したイベントを出力する for (let i = 0; i < myEvent.length; i++) { let title = myEvent[i].getTitle(); let description = myEvent[i].getDescription(); let startHour = myEvent[i].getStartTime().getHours(); let startMinute = myEvent[i].getStartTime().getMinutes(); //キーワードがカレンダーのタイトルもしくは詳細に含まれているか。含まれていなければ次へ if (title.indexOf(keyword) == -1) { if(description.indexOf(keyword) == -1){ continue; } } // 結果用の配列にまとめて追加する result.push([Utilities.formatDate(myEvent[i].getStartTime(), "JST", "YYYY/MM/dd") + ' ' + startHour + '時' + startMinute + '分' + title + description]); // アクティブセル取得する let activeCell = sheet.getActiveCell(); // アクティブセルから、書き込み範囲を取得 let range = sheet.getRange(activeCell.getRow(), activeCell.getColumn(), result.length, result[0].length); // シートに出力 range.setValues(result); } }
以上、GASを使ってGoogleカレンダーの情報を検索してスプレッドに書き込む方法についてでした。