このサンプルでは、Google スプレッドシートで予定を入力し、Google カレンダーに出力するコードを記載しています。
以下のリンクからサンプルシートがコピー可能です。まずはカレンダー反映したいGoogle アカウント を選択し、スプレッドシート をコピーしてお使いください。
Google カレンダーの操作サンプル ※スプレッドシートをコピーするGoogle アカウントが必要です予定をGoogle カレンダー で確認する
スプレッドシート をコピーしたら、適当な日付に予定を入力し、以下の出力ボタンをクリックしてください。その後カレンダーのリンクを確認すると、予定が反映されています。
<応用編>
1.カレンダー ID の認識
スプレッドシートから任意のカレンダーに出力します。
まずはカレンダー ID を確認します。自分のカレンダーはカレンダーの設定から「カレンダーの統合」を開くと載っています。
もっと簡単に先程のスプレッドシート の Apps Script からこれを確認する方法もあります。
まずは以下のスクリプトを先程コピーしたスプレッドシートのメニューの拡張機能>Apps Scriptで開いてみましょう。
すでにコードが書かれていますが、その下に以下のコードをはりつけて、以下のアイコンから保存します。
/**
* Lists the calendars shown in the user's calendar list.
* @see https://developers.google.com/calendar/api/v3/reference/calendarList/list
*/
function listCalendars() {
let calendars;
let pageToken;
do {
calendars = Calendar.CalendarList.list({
maxResults: 100,
pageToken: pageToken
});
if (!calendars.items || calendars.items.length === 0) {
Logger.log('カレンダーがありません。');
return;
}
// Print the calendar id and calendar summary
for (const calendar of calendars.items) {
Logger.log('%s (ID: %s)', calendar.summary, calendar.id);
}
pageToken = calendars.nextPageToken;
} while (pageToken);
}
左側のサービス からGoogle Calendar API を選択して追加します。
スクリプトの下部の実行ログに、カレンダーの名前とIDが表示されます。
2.任意のカレンダーに予定を書き出すようにスクリプトを変更
開いているスクリプトの15行目の以下の部分を書き換えます。これでデフォルトのカレンダーではなくカレンダーIDで指定しているカレンダーへの書き出しを指示します。
let Calendar = CalendarApp.getDefaultCalendar();
↓
let Calendar = CalendarApp.getCalendarById();
次に実行ログで出てきたカレンダー ID をコピーして、以下の部分に ” ” のコテーションマークとともに入力します。あるいは入力した文字を選択しながらShift + 2 をしても、文字列として認識します。
getCalendarById(CALENDAR_ID);
↓
getCalendarById(”abcdefg”);
プロジェクトを保存して、スプレッドシートに戻り、日付部分の出力ボタンを押すか、メニューから Convert2Calender を実行すると、今度は別のカレンダーに予定が反映されます。カレンダーから予定が反映されているか確認ができます。
<おまけ – カレンダーの予定をスプレッドシートに書き出し>
最後にカレンダーの予定をスプレッドシートに書き出してみましょう。
最初にコピーしたスプレッドシートにシートを1枚追加します。
Apps Script に戻って一番下に以下のコードを貼り付けてみましょう。
以下の部分は適当に書き出したい期間を変更します。
const startTime = new Date(‘2022/04/01 00:00:00’); //スプレッドシートに書き込みたい期間のはじめの日付を変更して記述
const endTime = new Date(‘2022/12/01 00:00:00’);//スプレッドシートに書き込みたい期間の終わりの日付を変更して記述
function getCalendarEvents() {
var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
const CALENDAR_ID = 'xxxxxxxxxxx'; //カレンダーIDを取得
//ヘッダを入力
mySheet.getRange("A1").setValue("イベント名");
mySheet.getRange("B1").setValue("開始時間");
mySheet.getRange("C1").setValue("終了時間");
mySheet.getRange("D1").setValue("イベント登録者名");
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
const startTime = new Date('2022/04/01 00:00:00'); //スプレッドシートに書き込みたい期間のはじめの日付を変更して記述
const endTime = new Date('2022/12/01 00:00:00');//スプレッドシートに書き込みたい期間の終わりの日付を変更して記述
const events = calendar.getEvents(startTime, endTime);
const values = [];
for(const event of events){
const record = [
event.getTitle(),
//event.getStartTime(),
Utilities.formatDate(event.getStartTime(),"GMT+0900","yyyy年MM月dd日 HH時mm分") ,//文字列に変換
//event.getEndTime(),
Utilities.formatDate(event.getEndTime(),"GMT+0900","yyyy年MM月dd日 HH時mm分"),//文字列に変換
event.getCreators()[0]
];
values.push(record);
}
SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
}
前と同様、カレンダー ID は表示したいものを入力します。保存して getCalendarEvents 関数を選び、実行します。
スプレッドシート上に該当する期間のカレンダーの内容が反映されているかと思います。