GASによる予定の追加ができない

284 views
Skip to first unread message

コーディングスキルが上がらない;

unread,
May 9, 2018, 7:36:19 AM5/9/18
to Google Apps API Japan
コードに不備があったので修正し再投稿させていただきます。
元のコードも一部変更しました。


年末までの仕事予定を一括追加するスクリプトを試行錯誤しながら書きました。
6日(日曜日)に制限回数を超えるまで実行するなどして、GW中から何度もテスト動作を繰り返しましたが、そのせいか、CalendarApp.getCalendarById('Calend...@group.calendar.google.com').createEvent()に相当する部分のみがサーバー側で無視されているのではないかと感じられます。
もし、何らかの制限が掛かっているのであれば、いつごろ解除されるのでしょうか?


[OS] Windows 10 Pro
[ブラウザ] Chromium 55.0.2883.87
[対象カレンダーの状況]
毎週日曜日他1日に「休業日」を設定済み。
[スクリプト作成の目的] 
年末までの営業日を一括設定したくなり、作成しました。既に休業日として設定してある日祝と特定の曜日を設定対象から外し、Calend...@group.calendar.gmail.comの予定が空白となっている日は、すべて「営業日」を設定できれば目的達成です。尚、コードに不備が見られた場合、ご指摘いただけると幸いです。

[実行コード]
function setBusinessDay1() {
var StartDay = new Date();
var EndDay = new Date("2018/12/31");
var MSecsDiff = EndDay.getTime() - StartDay.getTime();
var DaysDiff = Math.floor(MSecsDiff / (1000 * 60 * 60 *24) + 1);
Logger.log(DaysDiff);
var MyCalendarID = 'Caren...@group.calendar.google.com';
    var BuiltInHolidayCalID = 'ja.japanese#hol...@group.v.calendar.google.com';
var TargetCalendar = CalendarApp.getCalendarById(MyCalendarID);
Logger.log(TargetCalendar.getName());
for(D=0; D<DaysDiff; D++){
        var TargetDay = new Date(addDate(StartDay, D));
        var DayOfTargetDay = TargetDay.getDay();
        var StartTime = new Date(TargetDay.getMilliseconds() + 14400000);
        var EndTime = new Date(TargetDay.getMilliseconds() + 64800000);
        var EventTitlesOfDay1 = GetEventTitlesOfDay(MyCalendarID, TargetDay);
        var EventTitlesOfDay2 = GetEventTitlesOfDay(BuiltInHolidayCalID, TargetDay);
return (array1[cnt1] === RegExp.prototype.test, /^(.*[営休]業日)/); //営業日または休業日のいずれも設定されていない日を対象とする
});
var BoolOfTargetTitle2 = EventTitlesOfDay2.some(function(array2, cnt2, EventTitlesOfDay2) {
          return (array2[cnt2] === RegExp.prototype.test, /^(.+の日)/); //祝日のうち、「~の日」が付く日は対象とする
});
        Logger.log('日付: ' + TargetDay);
        Logger.log('曜日: ' + DayOfTargetDay);
        Logger.log('仕事予定: ' + EventTitlesOfDay1);
        Logger.log('仕事予定の件数: ' + EventTitlesOfDay1.length);
        Logger.log('祝日名: ' + EventTitlesOfDay2);
        Logger.log('祝日フラグ: ' + EventTitlesOfDay2.length);
        Logger.log('仕事予定とのマッチ: ' + BoolOfTargetTitle1);
        Logger.log('祝日とのマッチ: ' + BoolOfTargetTitle2);     
        if(DayOfTargetDay !== 0 && BoolOfTargetTitle1 == false && BoolOfTargetTitle2 == false) {
TargetCalendar.createEvent('営業日', StartTime, EndTime);  //実際にはスルーされる

Logger.log('設定対象日である');
        } else {
Logger.log('設定対象日ではない');
        }
}
}

function addDate(date1Str, days) {
var date1 = new Date(date1Str);

// パラメータで取得した日数を加算
date1.setDate(date1.getDate() + Number(days));

// Date型を(YYYY/MM/DD)形式へ成型して返却
return [date1.getFullYear(), date1.getMonth() + 1, date1.getDate()].join('/'); 
}

function GetEventTitlesOfDay(calendarID, date) {
TargetCalendar = CalendarApp.getCalendarById(calendarID);
var Events = TargetCalendar.getEventsForDay(new Date(date));
var intMaxIndex = Events.length;
var Titles = new Array();
for (var intIndex = 0; intIndex < intMaxIndex; intIndex++) {
Titles.push(Events[intIndex].getTitle());
}
  return Titles
}

[注記事項]
Caren...@group.calendar.google.comはダミーIDであり、実際にはこのアカウントを利用して作成したカレンダーのIDとなります。

hikochang

unread,
Nov 9, 2018, 7:11:47 AM11/9/18
to Google Apps API Japan
もう解決しているかもしれませんが、うまく動かないの部分だけを切り出した新しい関数を作成して、動きを確認するのが良いです。
時間が経った記事なのでコードはあまり見ていません。
Reply all
Reply to author
Forward
0 new messages