MESCIUS MultiRow for Windows Forms 12.0J
iCalendarファイルのインポート/エクスポート

iCalendar(ics)ファイルで定義されたイベントをGcCalendarCellの祝日としてインポートすることができます。また、GcCalendarCellの祝日設定をiCalendar(ics)ファイルに保存して、他のアプリケーションで再利用することも可能です。
iCalendarファイルについて
GcCalendarCellは、RFC 2445規格に準じたiCalendarファイル(*.ics)のVEVENTコンポーネントのインポートとエクスポートをサポートしています。iCalendarおよびVEVENTの仕様については、Web サイトInternet Calendaring and Scheduling Core Object Specification (iCalendar)」をご参照ください。

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

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ファイルのイベント情報をGcCalendarCellの祝日にインポートするには、以下の手順で行います。
  1. GcCalendarCellを選択し、プロパティウィンドウでHolidayStylesプロパティの[...]ボタンをクリックします。
  2. 表示された休日エディタで[開く...]ボタンをクリックします。
  3. 「ファイルを開く」ダイアログボックスが表示されるので、ファイルの種類を「iCalendar file(*.ics)」に変更して、インポートするicsファイルを選択し[開く]ボタンをクリックします。
  4. 「iCalendarファイルのインポート」ダイアログが表示されるので、インポートするイベントのチェックボックスにチェックを付けます。「終日の予定のみ」のチェックを外せば、時刻まで指定したイベントを表示することが可能です。
  5. 「詳細欄」と「休日のタイプ」の内容を確認してから[OK]ボタンをクリックします。
  6. インポートされた休日の設定を変更する場合は、休日エディタの「休日の追加」タブで行います。
  7. 休日エディタの「スタイル」一覧に追加された休日スタイルのチェックボックスをチェックします。
  8. [OK]ボタンをクリックしてウィンドウを閉じます。
  • インポートを実行する前に、必ず変換先の設定(「休日のタイプ」および「詳細」)が正しいことをご確認ください。
  • 該当イベントの元となるiCalendar情報は、ダイアログ下部の情報欄で確認できます。
  • iCalendarファイルで格納したイベント情報によって、自動的に変換先の休日タイプが設定されます。意図しない休日タイプが設定された場合は、「休日のタイプ」欄から変更できます。選択された「休日のタイプ」に該当のイベントを正しく変換できない場合(例えば、繰り返し条件のない臨時休業日を"DayOfWeekHoliday"に変換することはできません)、右側にエラーアイコンが表示されます。イベントの情報を確認して適切な休日タイプに変更してください。

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

           

Imports GrapeCity.Win.MultiRow
Imports PlusPakCell = GrapeCity.Win.MultiRow.PlusPak

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim GcCalendarCell1 = New PlusPak.GcCalendarCell()


    ' iCalendarファイルのパスを設定します。 
    Dim path As String = "D:\Holiday.ics"

    ' iCalendarファイルからすべてのイベントを取得し、GcCalendarCell1の休日に読み込みます。 
    Dim holidayStyle As PlusPakCell.HolidayStyle = GcCalendarCell1.LoadHolidayFromiCalendar(path)

    If holidayStyle Is Nothing Then
        MessageBox.Show("休日スタイルを読み込めませんでした。")
        Return
    End If

    holidayStyle.SubStyle = New PlusPakCell.SubStyle(Color.YellowGreen, Color.Red, True, False)
    GcCalendarCell1.ActiveHolidayStyles = New String() {holidayStyle.Name}

    Dim messageBoxVB As New System.Text.StringBuilder()

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

    ' 読み込んだ休日の名前を表示します。
    MessageBox.Show(messageBoxVB.ToString(), "All holidays")

    GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCalendarCell1})
    GcMultiRow1.RowCount = 10
End Sub
using GrapeCity.Win.MultiRow;
using PlusPakCell = GrapeCity.Win.MultiRow.PlusPak;

private void Form1_Load(object sender, EventArgs e)
{
    PlusPakCell.GcCalendarCell gcCalendarCell1 = new PlusPakCell.GcCalendarCell();

    // iCalendarファイルのパスを設定します。
    string path = @"D:\Holiday.ics";

    // iCalendarファイルからすべてのイベントを取得し、GcCalendar1の休日に読み込みます。
    PlusPakCell.HolidayStyle holidayStyle = gcCalendarCell1.LoadHolidayFromiCalendar(path);

    if (holidayStyle == null)
    {
        MessageBox.Show("休日スタイルを読み込めませんでした。");
        return;
    }

    holidayStyle.SubStyle = new PlusPakCell.SubStyle(Color.YellowGreen, Color.Red, true, false);
    gcCalendarCell1.ActiveHolidayStyles = new string[] { holidayStyle.Name };



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

    // 読み込んだ休日の名前を表示します。
    MessageBox.Show(messageBoxCS.ToString(), "All holidays");


    gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCalendarCell1 });
    gcMultiRow1.RowCount = 10;
}
iCalendarファイルのエクスポート
GcCalendarCellに設定されている休日をiCalendarファイルにエクスポートするには、以下の手順で行います。
  1. GcCalendarCellを選択し、プロパティウィンドウでHolidayStylesプロパティの[...]ボタンをクリックします。
  2. 休日エディタの[保存...]ボタンをクリックします。
  3. 「名前を付けて保存」ダイアログボックスが表示されるので、「ファイルの種類」から"iCalendar file(*.ics)"を選択して、保存するファイル名を入力し[保存]ボタンをクリックします。
  4. 以上の操作で、カレンダーに休日スタイルがエクスポートされます。
実行時にiCalendarファイルに休日をエクスポートするには、SaveHolidayToiCalendarメソッドを使用します。
Dim cell As PlusPakCell.GcCalendarCell = DirectCast(GcMultiRow1.Template.Row.Cells("GcCalendarCell1"), PlusPakCell.GcCalendarCell)
cell.SaveHolidayToiCalendar("D:\Holidays.ics", "2015年臨時休業日")
PlusPakCell.GcCalendarCell  cell  = (gcMultiRow1.Template.Row.Cells["gcCalendarCell1"] as PlusPakCell.GcCalendarCell);
cell.SaveHolidayToiCalendar(@"D:\Holidays.ics", "2015年臨時休業日");
   
関連トピック

 

 


© MESCIUS inc. All rights reserved.