Google Apps Script を使用して、複雑な繰り返しイベントを持つカレンダーを作成しました。ただし、そのイベントを定期的なイベントとして別のカレンダーにコピーすることはできません。注: 繰り返しルールは、Web インターフェースから生成または編集することはできません。
実際の例として、ユーザーがこの公開された Google カレンダーから定期的なイベントをコピーしたいとします。このイベントは、私の大学の木曜コースのコース スケジュールの一種のテンプレート イベントです。
ユーザーが定期的なイベントをユーザーがアクセスできる別のカレンダーにコピーすることを妨げる 2 つの問題を次に示します。
- イベントのインスタンスをクリックして「マイ カレンダーにコピー」と言った場合、イベントが繰り返しとして定義されていても、その単一のイベントのみがコピーされます。学期のすべてのイベントを取得するには、ユーザーがこれを 10 回以上実行する必要があるため、これは適切な解決策ではありません。
- イベントのインスタンスをクリックしてから [詳細] をクリックし、[その他のアクション] メニュー (xxxx はユーザーが所有するカレンダー) で [xxxx にコピー] を試行すると、動作するように見えます。ただし、[保存] をクリックすると、「エラーが発生しました。後でもう一度やり直してください」というエラーが表示されます。
編集ここに、Google カレンダーでイベントがどのように表示されるかのスクリーン ショットを示します (イベントをクリックして、[詳細] をクリックします)。
この定期的なイベントは、いくつかの例外を除いて、学期の開始から終了まで毎週月曜日に行われることに注意してください。休日はありません (例: Mon 2013-02-25 )。ただし、 Wed 2013-02-27も含まれます。この日は月曜日のようにコースが提供されます (大学のコース スケジュールによる)。
繰り返しますが、定期的なイベントは Google カレンダーでは問題なく表示されますが、別のカレンダーに丸ごとコピーすることはできません。
カレンダーを作成する GAS 関数 (すべてのコードがここにあるわけではありません):
function createCalendar(calendarName, courseCode, weekday, times, room, isLab) { Logger.log("最終日: " + LAST_TRIMESTER_DATE); // 最終日をハックして、午前 0 時ではなく、翌日の直前、つまり 23:59:59 になるようにします varadjustedLastDay = LAST_TRIMESTER_DATE; adjustedLastDay.setTime(adjustedLastDay.getTime() + (23*60*60*1000) + (59*60*1000) + (59*1000)); Logger.log("最終日の調整: " + AdjustedLastDay); var eventRecurrence = CalendarApp.newRecurrence(); eventRecurrence.addDailyRule().until(adjustedLastDay).interval(1).onlyOnWeekday(平日); // 初日の曜日を取得 var weekdayOfFirstDay = Utilities.formatDate(FIRST_TRIMESTER_DATE, LONG_TIME_ZONE, "EEEE").toUpperCase(); // このカレンダーがラボ用の場合、最初の週を除外します もし (isLab) { eventRecurrence.addDailyExclusion().times(1); } そうしないと { // コースなので、コース日でない場合は初日を除く // -- これは一種のバグです。「onlyOnWeekday」が指定されていなくても、イベントの「初日」が常に作成されようとするからです if (weekdayOfFirstDay != weekday.toString()) { eventRecurrence.addDailyExclusion().times(1); // eventRecurrence.addDateExclusion(FIRST_TRIMESTER_DATE); } } // すべての休日を除外 for (var i = 0; i