PowerTools PlusPak for Windows Forms 8.0J
iCalendarファイルのインポート/エクスポート

iCalendar(ics)ファイルで定義されたイベントを GcCalendar コントロールの祝日としてインポートすることができます。また、GcCalendar コントロールの祝日設定をiCalendar(ics)ファイルに保存して、他のアプリケーションで再利用することも可能です。


iCalendarファイルについて
GcCalendar コントロールは、RFC 2445規格に準じたiCalendarファイル(*.ics)のVEVENTコンポーネントのインポートとエクスポートをサポートしています。iCalendarおよびVEVENTの仕様については、Web サイトInternet Calendaring and Scheduling Core Object Specification (iCalendar)」をご参照ください。

GcCalendar コントロールでサポートするVEVENTプロパティの一覧、およびGcCalendar コントロールの祝日設定との関係は次の表のとおりです。

VEVENT Holiday ForceHoliday/ForceWorkday DayOfWeekHoliday ForceDayOfWeekHoliday/ForceDayOfWeekWorkday
Summary Name Name Name Name
DTStart.Month StartMonth × × ×
DTStart.Day StartDay × × ×
DTEnd.Month EndMonth × × ×
DTEnd.Day EndDay × × ×
DTStart × Start × ×
DTEnd × End × ×
DTStart.Year × × × Year
RRule.ByMonth × × Month Month
RRule.ByDay × × DayOfWeek DayOfWeek
RRule.ByDay × × DayOfWeekInMonth DayOfWeekInMonth

  • STATUSプロパティが"CANCELLED"のイベントはインポートされません。
  • インポートされるイベントがどのようなHolidayに変換されるかは、RRULEプロパティの値によって自動的に決定されます。例えば、"RRULE:FREQ=YEARLY;BYDAY=3MO;BYMONTH=9"は、毎年9月第3月曜日と認識されます。
  • DTStartとDTEndが時刻のない日付形式の場合、値はそのまま保持されます。(例:"DTSTART;VALUE=DATE:20101223")
  • DTStartとDTEndが終日を示す値ではなく、時刻をローカル時間で記述されている場合、値はそのまま保持されます。(例:"DTSTART;TZID=JAPAN:19970714T133000")
  • DTStartとDTEndが終日を示す値ではなく、時刻を協定世界時(UTC)で記述されている場合、値はローカル時間に変換し処理されます。(例:"DTSTART:20101218T073000Z" → 日本時間の2010/12/18 16:30:00)

iCalendarファイルのインポート
設計時に、iCalendarファイルのイベント情報をGcCalendar コントロールの祝日にインポートするには、以下の手順で行います。
  1. GcCalendar コントロールをフォームに配置します。
  2. GcCalendar コントロールを選択し、プロパティページの[休日設定]のページを表示します。
  3. 「カレンダーに表示する休日スタイルを選択」グループボックスから[開く]ボタンをクリックします。
  4. 「ファイルを開く」ダイアログボックスが表示されるので、ファイルの種類を「iCalendar file(*.ics)」に変更して、インポートするicsファイルを選択し[開く]ボタンをクリックします。
  5. 「iCalendarファイルのインポート」ダイアログが表示されるので、インポートするイベントのチェックボックスにチェックを付けます。「終日の予定のみ」のチェックを外せば、時刻まで指定したイベントを表示することが可能です。
  6. 「詳細欄」と「休日のタイプ」の内容を確認してから[OK]ボタンをクリックします。

    インポートされた休日スタイルをGcCalendar コントロール上で有効にするには、休日スタイルをアクティブに設定する必要があります。アクティブに設定するには、プロパティページ上で、インポートされた休日スタイルのチェックボックスをチェックします。

    インポートされた休日の設定を変更する場合は、「休日の追加」タブで行います。
  • インポートを実行する前に、必ず変換先の設定(「休日のタイプ」および「詳細」)が正しいことをご確認ください。
  • 該当イベントの元となるiCalendar情報は、ダイアログ下部の情報欄で確認できます。
  • iCalendarファイルで格納したイベント情報によって、自動的に変換先の休日タイプが設定されます。意図しない休日タイプが設定された場合は、「休日のタイプ」欄から変更できます。選択された「休日のタイプ」に該当のイベントを正しく変換できない場合(例えば、繰り返し条件のない臨時休業日を"DayOfWeekHoliday"に変換することはできません)、右側にエラーアイコンが表示されます。イベントの情報を確認して適切な休日タイプに変更してください。
上記の手順は、スマートタグの「休日設定を開く...」コマンドからでも同様に実行できます。

実行時にiCalendarファイルから休日をインポートするには、LoadHolidayFromiCalendarメソッドを使用します。次の例は、既存のiCalenderファイルからイベント情報をGcCalendar コントロールの休日に読み込み、表示する方法を示します。サンプルコードを実行するには、ディスクDの下に"Holiday.ics"というiCalendarファイルを配置しておく必要があります。

Imports GrapeCity.Win.Calendar

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' iCalendarファイルのパスを設定します。
        Dim path As String = "D:\Holiday.ics"

        ' iCalendarファイルからすべてのイベントを取得し、GcCalendar1の休日に読み込みます。
        Dim holidayStyle As HolidayStyle = Me.GcCalendar1.LoadHolidayFromiCalendar(path)
        holidayStyle.SubStyle = New SubStyle(Color.YellowGreen, Color.Red, True, False)
        Me.GcCalendar1.ActiveHolidayStyles = New String() {holidayStyle.Name}

        If holidayStyle Is Nothing Then
            MessageBox.Show("No holidays are loaded!")
            Return
        End If

        Dim messageBoxVB As New System.Text.StringBuilder()

        For Each holiday As IHoliday In holidayStyle.Holidays
            messageBoxVB.AppendFormat("Name = {0}", holiday.Name)
            messageBoxVB.AppendLine()
        Next

        ' Output the loaded holidays' names.
        MessageBox.Show(messageBoxVB.ToString(), "All holidays")

    End Sub
using GrapeCity.Win.Calendar;

        private void button1_Click(object sender, EventArgs e)
        {
            // iCalendarファイルのパスを設定します。
            string path = @"D:\Holiday.ics";

            // iCalendarファイルからすべてのイベントを取得し、GcCalendar1の休日に読み込みます。
            HolidayStyle holidayStyle = this.gcCalendar1.LoadHolidayFromiCalendar(path);
            holidayStyle.SubStyle = new SubStyle(Color.YellowGreen, Color.Red, true, false);
            gcCalendar1.ActiveHolidayStyles = new string[] { holidayStyle.Name };


            if (holidayStyle == null)
            {
                MessageBox.Show("No holidays are loaded!");
                return;
            }

            System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
            foreach (IHoliday holiday in holidayStyle.Holidays)
            {
                messageBoxCS.AppendFormat("Name = {0}", holiday.Name);
                messageBoxCS.AppendLine();
            }

            // Output the loaded holidays' names.
            MessageBox.Show(messageBoxCS.ToString(), "All holidays");

        }
iCalendarファイルのエクスポート
GcCalendar コントロールに設定されている休日をiCalendarファイルにエクスポートするには、以下の手順で行います。

  1. GcCalendar コントロールを選択し、プロパティページの[休日設定]のページを表示します。
  2. 「カレンダーに表示する休日スタイルを選択」グループボックスから[保存]ボタンをクリックします。
  3. 「名前を付けて保存」ダイアログボックスが表示されるので、「ファイルの種類」から"iCalendar file(*.ics)"を選択して、保存するファイル名を入力し[保存]ボタンをクリックします。
  4. 以上の操作で、カレンダーに休日スタイルがエクスポートされます。
実行時にiCalendarファイルに休日をエクスポートするには、SaveHolidayToiCalendarメソッドを使用します。

GcCalendar1.SaveHolidayToiCalendar("D:\Holidays.ics", "2010年臨時休業日")
gcCalendar1.SaveHolidayToiCalendar("D:\Holidays.ics", "2010年臨時休業日");
   
参照