![見出し画像](https://assets.st-note.com/production/uploads/images/121404806/rectangle_large_type_2_07a376303e7fb6dd03f9548c7ff7f454.png?width=1200)
【GAS】Google Apps Script活用事例 Google Calendar APIを有効にして、ファイルを添付した予定を作成する方法
GASで出来ない事もあるなぁ……。
GASを使って仕事で使ってるGoogleカレンダーにスプレッドシートの内容を転載するスクリプトを作ったんだけど、添付ファイルを付けたい場合、CalenderAppじゃなくてCalenderサービスを追加して supportAttachmentsをtrueにしないと動かないのね。ハマった。#GoogleCalender #添付ファイル #GAS
— ぐん (@Gunso5) July 27, 2021
こちらを参考にしました!!
![](https://assets.st-note.com/img/1699683627117-q1Fglq6ePV.png?width=1200)
やりたかった事としては、作成済みのイベントに添付ファイルを追加したかったのですが出来ませんでした。その過程を記録に残しておきます。
添付ファイル付きで予定を新規作成する
function attatchmentFile(){
const calendarId = 'sample@gmail.com';
const eventParam = {
summary: 'Google Calendar APIによる登録', // カレンダーの予定名
description: 'テスト',
location: '〒105-0011 東京都港区芝公園四丁目2番8号',
start: {
'dateTime': (new Date('2023-11-12T10:00:00')).toISOString(),
'timeZone': 'Asia/Tokyo'
},
end: {
'dateTime': (new Date('2023-11-12T11:00:00')).toISOString(),
'timeZone': 'Asia/Tokyo'
},
attachments:[{
fileUrl: 'https://drive.google.com/file/d/**************/view',
title: 'サンプルファイル',
}]
};
Calendar.Events.insert(eventParam, calendarId, { supportsAttachments: true });
}
Bing Chatで聞いてみた回答 (Chat GPT 4)
Google Calendar APIを使用して既存のイベントにファイルを追加するには、events.patchメソッドを使用することが推奨されます。しかし、残念ながら、Google Calendar APIは既存のイベントに対してファイルを追加する機能を提供していません。
一方で、events.importメソッドを使用して、既存のイベントのプライベートコピーをカレンダーに追加することが可能です。このメソッドは、iCalUIDを指定してイベントをインポートするために使用されます。ただし、この方法では新たにイベントが作成され、元のイベントとは異なるGoogle Calendar IDが割り当てられます。
したがって、Google Calendar APIを使用して既存のイベントにファイルを追加することは現状では不可能です。この問題を解決するための最善の方法は、イベントを更新する際に必要なファイルを含めてイベントを再作成することです。
予定を取得する方法
function getEvents() {
const calendarId = 'sample@gmail.com';
const optionals = {
timeMin: (new Date('2023/11/11 00:00')).toISOString(),
showDeleted: false,
singleEvents: true,
maxResults: 2, //予定を取得する件数
orderBy: 'startTime'
};
const events = Calendar.Events.list(calendarId, optionals);
console.log(events);
console.log(`メールアドレス:${events.items[0].creator.email}`);
}
これは、別にCalendar APIを使わなくても出来るんだよなぁー….。
iCalUID: '*******@google.com' が、event.getId()などお馴染みの書き方で取れるイベントIDと同じみたいです。
作成した予定に変更を加える方法
function updateEvent() {
const calendarId = 'sample@gmail.com';
const eventId = 'あなたのイベントID'; // 更新したいイベントのIDを指定します
// イベントを取得
const event = Calendar.Events.get(calendarId, eventId);
// 場所を変更する
event.location = "新しい住所";
// イベントを更新
Calendar.Events.patch(event, calendarId, eventId);
}
会議室が空いているかどうかを調べるスクリプト
こちらは別件で、Google Calendar APIを使用して会議室が空いているかどうかを調べるスクリプトを作成しました。カレンダーAPIを使わなくても出来ます……。カレンダーAPIを使わないと出来ないのは、添付ファイルの追加だけです。
function isBookedMeetingRoom() {
const calendarId = '****************@resource.calendar.google.com';
const startTime = new Date('2023/11/14 11:00:00');
const endTime = new Date('2023/11/14 12:00:00');
const optionalArgs = {
timeMin: (startTime).toISOString(),
timeMax: (endTime).toISOString(),
showDeleted: false,
singleEvents: true,
maxResults: 2,
orderBy: 'startTime'
};
const response = Calendar.Events.list(calendarId, optionalArgs);
const events = response.items;
const isBooked = (0 < events.length);
// 会議室が予約されていない場合は [] 配列のlengthが0で返ってくる
console.log(events);
isBooked ? console.warn(`${isBooked}: 会議室は予約されています`) : console.log(`${isBooked}: 会議室は空いています`);
return isBooked
}
自分の所属先の会社だと、30分ないし、1時間で会議が設定される事が多いので、maxResults: 2としておくと、その間に会議があれば、何らかのデータが返ってきます。
上記のスクリプトで空き状況を確認、false 、会議室が空いていなければ、予約するという事が出来そうです。
この記事が気に入ったらサポートをしてみませんか?