空想科学的雑記帳

メカやらトミカやらペーパークラフトやら。

GASでGoogleカレンダー登録

番外編。

GAS(Google Apps Script)でGoogleカレンダーの操作をしてみるも、いろいろハマったので備忘メモ。


①日付指定
複数日の終日指定では、終了日は+1日の加算が必要。
他のスケジューラから抜き出したデータを食わせようとしてハマった。

[試し登録コード]

    var calendar = CalendarApp.getDefaultCalendar();
    var title     = "予定タイトル" ;
    var option = {
                  description: "スケジュール内容記述です",
                  location: "場所記述です" ,
                        } ;
    var startDate = new Date("2019/12/03 03:00") ;
    var endDate   = new Date("2019/12/05 17:00") ;

    //1日終日スケジュール登録
   calendar.createAllDayEvent(title, startDate, option) ;          //時間は無視される

   //複数日終日スケジュール登録 → 12/3~12/4の2日予定となる
   calendar.createAllDayEvent(title, startDate, endDate, option) ;  //時間は無視される

   //終日でない複数日スケジュール登録 →AllDayでないので、日付・時間通りの登録
   calendar.createEvent(title, startDate, endDate, option) ;        //指定した日付と時間で登録される

[結果]
f:id:papertoybox:20191219234509p:plain

f:id:papertoybox:20191219234556p:plain

f:id:papertoybox:20191219234649p:plain

f:id:papertoybox:20191219234734p:plain



[終日予定の結論]
終日予定は、元スケジューラの終了日に+1日して登録。
※月またぎもあるので、日付を+1日するには以下が便利。

 endDate.setDate(endDate.getDate() +1)  ;   //endDateの「日付」を取り出して、+1日して再セット



② 「予定の通知」の設定
登録したスケジュール全てに「10分前通知」の設定がされてしまう。
GASのAPIを探したが、「予定の通知」のパラメータが見つからずウロウロ。
→「予定の通知」の設定 はGASのCalendarAPIからは設定できない。
 登録先カレンダー毎の「設定」の「予定の通知」の設定に沿って、
 スケジュール登録時に自動設定されることが判明。

 リファレンスをよく読みましょう (-o-)/



③カレンダー一覧取得
自分の操作/表示できるカレンダーは、以下でcalendarオブジェクトの配列として取得できる。

  var calendars = CalendarApp.getAllCalendars() ;

・デフォルトカレンダーは、Googleカレンダーでの表示はアカウントの「名前」だが
  calendars配列に返るカレンダー名calendars[i].getName()はアカウントのID(メールアドレス形式の ***@gmail.com)
・複数のカレンダーを使用している場合、デフォルトカレンダー (***@gmail.com)がcalendars配列の1番目に来るとは限らない
・他ユーザのカレンダーを共有している場合、そのカレンダーもcalendars配列に含まれる
・日本語で「名前」を付けたカレンダーはそのまま日本語文字列でカレンダ名が返る
・設定で「カレンダーリストに表示しない」としたものはcalendars配列に返らない
 カレンダー画面の左側メニューでチェック☑を外しただけのカレンダーはcalendars配列には含まれる
・「ToDoリスト」「リマインダー」はカレンダーにオーバーレイ表示できるが、calendars配列には返らない

f:id:papertoybox:20191219235546p:plain

f:id:papertoybox:20191220000128p:plain 
 

覚え書き。





.