3

私は Python を使用していますが、ここでは関係ないと思います。以下の iCal スニペットは、Outlook 2010 エクスポート (完全なデータ) からのものです。Outlook では、2012 年 4 月 12 日のイベントのインスタンスを含む、定期的なイベントとして表示されます。シリーズを開くと、次のように表示されます。

繰り返し: 2012 年 3 月 29 日から有効な毎週木曜日の午後 12:00 から午後 12:30 まで発生します。

私の質問は次のとおりです。以下の情報から再発スケジュールを導き出すことは可能ですか? どのフィールドに情報が表示されますか? RRULE が見つかると思いますが、ここにはそのようなものはありません。

BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20120312T133301Z
DESCRIPTION:\n
DTEND;TZID="Eastern Standard Time":20120329T123000
DTSTAMP:20120411T220938Z
DTSTART;TZID="Eastern Standard Time":20120329T120000
LAST-MODIFIED:20120531T155022Z
LOCATION:1501 Fake Street\, Conference Room G
PRIORITY:5
RECURRENCE-ID;TZID="Eastern Standard Time":20120419T120000
SEQUENCE:8
SUMMARY;LANGUAGE=en-us:My Cool Event
TRANSP:OPAQUE
UID:040000008200E00074C5B7101A82E008000000000029934B3300CD01000000000000000
    0100000001516438BA45C3946AF9C4C2A563FB2BE
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
    N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
    rsion 14.02.5004.000">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f
    rom text/rtf format -->\n\n<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG
    ="en-us"></SPAN></P>\n\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-APPTLASTSEQUENCE:16
X-MS-OLK-APPTSEQTIME:20120411T220937Z
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
END:VEVENT
4

2 に答える 2

2

次のプログラムで ICS ファイルを実行しました。

from icalendar import Calendar, Event
from datetime import datetime

cal = open('test.ics','rb')
ical = Calendar.from_ical(cal.read())
for component in ical.walk():
    if component.name == 'VEVENT':
        for item in component.sorted_items():

            if item[0] == 'RECURRENCE-ID':
                reoccur_item = item[1]
                print reoccur_item.params
                print reoccur_item.dt
                continue
            if item[0] == 'DTSTART':
                print 'DSTART', item[1].dt
                continue
            if item[0] == 'DTEND':
                print 'DTEND', item[1].dt
                continue
            if item[0] == 'DTSTAMP':
                print 'DTSTAMP', item[1].dt
                continue
            print item

cal.close()

そして、以下は私が得た出力です

('SUMMARY', vText(u'My Cool Event'))
DSTART 2012-03-29 12:00:00
DTEND 2012-03-29 12:30:00
DTSTAMP 2012-04-11 22:09:38+00:00
('UID', vText(u'040000008200E00074C5B7101A82E008000000000029934B3300CD01000000000000000   0100000001516438BA45C3946AF9C4C2A563FB2BE'))
RECURRENCE-ID Parameters({'TZID': 'Eastern Standard Time'})
RECURRENCE-ID 2012-04-19 12:00:00
('SEQUENCE', 8)
('CLASS', vText(u'PUBLIC'))
('CREATED', <icalendar.prop.vDDDTypes instance at 0x101c4e518>)
('DESCRIPTION', vText(u'\n'))
('LAST-MODIFIED', <icalendar.prop.vDDDTypes instance at 0x1020874d0>)
('LOCATION', vText(u'1501 Fake Street, Conference Room G'))
('PRIORITY', 5)
('TRANSP', vText(u'OPAQUE'))
('X-ALT-DESC', vText(u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E   N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve   rsion 14.02.5004.000">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f   rom text/rtf format -->\n\n<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG   ="en-us"></SPAN></P>\n\n</BODY>\n</HTML>'))
('X-MICROSOFT-CDO-BUSYSTATUS', vText(u'BUSY'))
('X-MICROSOFT-CDO-IMPORTANCE', vText(u'1'))
('X-MICROSOFT-DISALLOW-COUNTER', vText(u'FALSE'))
('X-MS-OLK-APPTLASTSEQUENCE', vText(u'16'))
('X-MS-OLK-APPTSEQTIME', vText(u'20120411T220937Z'))
('X-MS-OLK-AUTOFILLLOCATION', vText(u'FALSE'))
('X-MS-OLK-CONFTYPE', vText(u'0'))

再発生ルールは空で、これは再発生イベントの 1 つのインスタンスのように見えますが、最終的にはさまざまな Microsoft 固有のデータが含まれます。これにはシーケンス番号 8 があり、X-MS-OLK-APPTLASTSEQUENCE:16 は、最後のインスタンスにシーケンス 16 が必要であることを示しています。

同じ UID を持つ各チームに、シーケンス スタンプを持つ複数のインスタンスを作成したようです。

于 2012-06-06T16:59:36.590 に答える
0

vbaを使用してカレンダーをエクスポートしようとしましたか? これは、rrule を取得するためのオプションである可能性があります。Item.GetRecurrencePattern (Item が myItem As AppointmentItem として宣言されている) を監視し、olRecursMonthly、olRecursYearly、... と比較する必要があります。次に、アイテムの interval 属性と count 属性を探して、rrule 文字列全体を再構築します。

このプロジェクトで詳細を確認できます: http://sourceforge.net/projects/outlook2ical/files/outlook2ical/v1.04/

于 2012-06-15T06:39:45.743 に答える