5

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
4

2 に答える 2

2

これは、複雑な繰り返しルールのコピーに問題があるという点で、Google カレンダーのバグのようです。Google カレンダー インターフェースの歯車アイコンの下にある [フィードバックを送信] リンクを使用して、チームに報告できます。

于 2013-01-30T14:33:06.893 に答える
1

もう 1 つのオプションは、ICA をエクスポートして、ユーザーにインポートさせることです。ある種のリンク ボタンを使用して両方を実行することもできます。Google イベントの ica ファイルを取得する方法の例を次に示します。

http://google.com/calendar/ical/ [CALENDARID]/public[または非公開に応じて]/full/[eventID].ics

これにより、ユーザーにコードが提供され、カレンダーに手動でインポートできるようになります。URL を生成し、指定されたコースにサインアップするすべての学生に電子メールを送信できます。

T

于 2014-04-26T15:01:08.783 に答える