Skip to content

Instantly share code, notes, and snippets.

@ttsukagoshi
Last active March 9, 2023 00:46
Show Gist options
  • Save ttsukagoshi/80b75e2380ebbef970c07b74e4f2c1b2 to your computer and use it in GitHub Desktop.
Save ttsukagoshi/80b75e2380ebbef970c07b74e4f2c1b2 to your computer and use it in GitHub Desktop.
Googleカレンダーに登録した予定のうち、指定期間内で特定のキーワードを持つイベントを抽出して、Googleスプレッドシートの新しいシートに一覧表として落とし込む簡易ツール。Googleスプレッドシートにバインドされたスクリプトとして利用。

Googleカレンダーに登録した予定のうち、指定期間内で特定のキーワードを持つイベントを抽出して、Googleスプレッドシートの新しいシートに一覧表として落とし込む簡易ツール。Googleスプレッドシートにバインドされたスクリプトとして利用。

スプレッドシートの様式

スクリプト内でシート名「config」となっているシートはこんな感じ:

- A B
1 CALENDAR ID hogehoge@aiu.ac.jp
2 KEYWORDS イベントの検索キーワード
3 START 2023/04/06
4 END 2023/08/31
const SHEET_NAME_CONFIG = 'config';
/**
* スプレッドシートが開いたときのメニュー追加
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('カレンダーから転記')
.addItem('カレンダーからイベント取得', 'getFilteredCalendarEvents')
.addToUi();
}
/**
* 指定したカレンダー内の、指定期間・キーワードで条件に合致するイベントを
* スプレッドシートの新規シートに転記する。
*/
function getFilteredCalendarEvents() {
const ui = SpreadsheetApp.getUi();
try {
// 予定の検索条件をスプレッドシートから取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const config = ss
.getSheetByName(SHEET_NAME_CONFIG)
.getDataRange()
.getValues()
.reduce((o, row) => {
o[row[0]] = row[1];
return o;
}, {});
console.log(config); //////
// 検索条件に基づいてカレンダーイベントを取得
const targetEvents = CalendarApp
.getCalendarById(config['CALENDAR ID'])
.getEvents(config['START'], config['END'], {
search: config['KEYWORDS']
})
.map((event) => [
event.getTitle(),
event.getStartTime(),
event.getEndTime(),
event.getLocation(),
event.getDescription()
]);
targetEvents.unshift([
'イベント名',
'開始日時',
'終了日時',
'場所',
'説明'
])
console.log(targetEvents); ///////
// 取得したイベントを、スプレッドシートの新しいシートに転記
const newSheet = ss.insertSheet();
newSheet.getRange(1, 1, targetEvents.length, targetEvents[0].length).setValues(targetEvents);
SpreadsheetApp.flush();
} catch (e) {
ui.alert(e.stack);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment