LoginSignup
1
3

More than 1 year has passed since last update.

【GAS】Google Calendarに月の予定を一括入力

Last updated at Posted at 2023-02-25

初めに

インターンの出勤予定をGoogle Calendarで記載しようとした時に、毎週決まった時間に入力するなら一括でできないかと思いました。

準備するもの

  • カレンダーID

カレンダーIDの取得方法

  1. Google Calendarにアクセスし、左側のサイドバーから「マイカレンダー」をクリックします。
  2. カレンダーの一覧から、取得したいカレンダーの右側にある三点リーダーをクリックします。
  3. 「設定と共有」をクリックします。
  4. 「カレンダーの設定」のページが開かれますので、下にスクロールして「カレンダーのID」を確認できます。

書いていきます!

今回は2023年3月の月、水、金曜日に9:00~15:00で予定を入れるコード例となります。
必要に合わせて変更してください。

Googlea Apps Scriptに以下コードを貼り付けます。

function addSchedule() {
  // カレンダーIDを指定する
  var calendarId = '取得したカレンダーID';

  // 予定を作成する月を指定する
  var year = 2023;
  var month = 3;

  // 月曜日、水曜日、金曜日を取得する
  var days = [];
  for (var day = 1; day < 32; day++) {
    try {
      var date = new Date(year, month - 1, day);
    } catch (e) {
      break;
    }
    if ([1, 3, 5].indexOf(date.getDay()) !== -1) {
      days.push(Utilities.formatDate(date, 'Japan', 'yyyy-MM-dd'));
    }
  }

  // 予定を作成する
  var service = CalendarApp.getDefaultCalendar();
  for (var i = 0; i < days.length; i++) {
    var start = new Date(days[i] + 'T09:00:00');
    var end = new Date(days[i] + 'T15:00:00');
    var event = service.createEvent('予定', start, end, {location: 'リモート', description: 'リモートワーク'});
  }
}

実行してご自身のカレンダーに予定が追加されたことを確認してみてください!

終わりに

Pythonで同じことをやろうとすると、GCPでアカウントを作成して、プロジェクトを作成して、Google Calendar APIを有効にして、サービスアカウントを取得して...
とかなりめんどくさくて、GASの便利さを実感しますね。

以下に上記のGASのコードと同じ内容のPythonコードを貼っておくので、気になる人は試してみてください!

from google.oauth2 import service_account
from googleapiclient.discovery import build
from datetime import datetime, timedelta

# サービスアカウントキーのパス(ご自身のサービスアカウントキーのjsonファイルへのパスに変えてください)
KEY_FILE_LOCATION = 'path/key.json'

# 認証情報の取得
creds = service_account.Credentials.from_service_account_file(KEY_FILE_LOCATION, scopes=['https://www.googleapis.com/auth/calendar'])

# Google Calendar APIのオブジェクトを作成
service = build('calendar', 'v3', credentials=creds)

# 予定を作成する月を指定する
year = 2023
month = 3

# 月曜日、水曜日、金曜日を取得する
days = []
for day in range(1, 32):
    try:
        date = datetime(year, month, day)
    except ValueError:
        break
    if date.weekday() in [0, 2, 4]:
        days.append(date.strftime('%Y-%m-%d'))

# 予定を作成する
for day in days:
    event = {
        'summary': '予定',
        'location': 'リモート',
        'description': 'リモートワーク',
        'start': {
            'dateTime': f'{day}T09:00:00',
            'timeZone': 'Japan',
        },
        'end': {
            'dateTime': f'{day}T15:00:00',
            'timeZone': 'Japan',
        },
        'reminders': {
            'useDefault': True,
        },
    }

    event = service.events().insert(calendarId='ご自身のカレンダーID', body=event).execute()

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3