0

私は自分のグーグルサイトの不格好なグーグルカレンダーアジェンダビューを、グーグルスクリプトを介して自分で作成したディスプレイに置き換えようとしています。

ページでイベントの詳細を取得できますが、複数のカレンダーを表示する必要があります。アイテムがページ上で正しい順序で表示され、カレンダーごとにグループ化されていないことを確認するにはどうすればよいですか。

私は次のいずれかを行うことができます:

スクリプトを実行するたびに一時カレンダーを作成し、複数のカレンダーをマージします(注-カレンダーの作成オプションが表示されません)

または、情報をスプレッドシートにダンプして、そこから並べ替えを行います

または、カレンダーではなく、時間でループします。

スプレッドシートの1つが最良の選択肢だと思います-他に何か考えはありますか?

iCalファイルをスプレッドシートに自動的にコピーする簡単な方法はありますか?

ジョージ

4

2 に答える 2

0

PHPとZendGdataライブラリがオプションの場合は、カレンダーリストフィードを取得してから、各カレンダーのイベントをループして配列に配置できます。その後、次のように開始時間で並べ替えることができます。

     function cmp( $a, $b )
     {
        if(  $a->when[0]->startTime ==  $b->when[0]->startTime ){ return 0 ; }
        return ($a->when[0]->startTime < $b->when[0]->startTime) ? -1 : 1;
     }

     uasort($allEvents,'cmp');
于 2012-08-06T19:59:19.590 に答える
0

私はこれをたくさん扱ってきました。特に、複数のカレンダーでイベントのゲスト リスト メールを送信する場合。以下の関数は、カレンダーの配列と開始時刻と終了時刻を取り、それを一意のCalendarEventオブジェクトの単一の配列に変換します。

ここでコードのバージョンを実行できます。また、そこにもコメントが付けられていることがわかります。

ソートピースは、あなたが最も興味を持っていると思われるものです。それはbyStart関数に含まれています。MDN Array.Sort Referenceで、配列の並べ替えに関する詳細情報を見つけることができます。byStartの任意の配列に対して機能しCalendarEventます。

カレンダーを管理するのはリストが多いため、Javascript で使用できる反復関数を使用すると、この作業を簡単に行うことができます。MDN には反復メソッドに関する詳細情報があります

ここにあります:

function mergeCalendarEvents(calendars, startTime, endTime) {

  var params = { start:startTime, end:endTime, uniqueIds:[] };

  return calendars.map(toUniqueEvents_, params)
                  .reduce(toSingleArray_)
                  .sort(byStart_);
}

function toCalendars_(id) { return CalendarApp.getCalendarById(id); }

function toUniqueEvents_ (calendar) {
  return calendar.getEvents(this.start, this.end)
                 .filter(onlyUniqueEvents_, this.uniqueIds);
}

function onlyUniqueEvents_(event) {
  var eventId = event.getId();
  var uniqueEvent = this.indexOf(eventId) < 0;
  if(uniqueEvent) this.push(eventId);
  return uniqueEvent;
}

function toSingleArray_(a, b) { return a.concat(b) }

function byStart_(a, b) {
  return a.getStartTime().getTime() - b.getStartTime().getTime();
}
于 2013-07-17T03:01:24.653 に答える