如何创建包含多个VEVENT的.ICS文件以导入到现有Outlook日历中

时间:2008-12-02 15:32:35

标签: asp.net outlook calendar icalendar

我需要允许用户下载具有多个会议日期的活动。为此,我创建了一个要下载的内存流,生成一个.ics文件。例如:

BEGIN:VCALENDAR
PRODID:-//Company//Product//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
SUMMARY:Subject of Event
LOCATION:Location of Event
UID:1227559810-8527e2c-20847@domain.com
DESCRIPTION:Some description
DTEND:20081101T200000Z
DTSTART:20081101T200000Z
PRIORITY:3
END:VEVENT
BEGIN:VEVENT
  ...
END:VEVENT
END:VCALENDAR

如果我只在此文件中包含一个VEVENT,它会将其保存到我现有的Outlook日历中。但是,当我有多个VEVENT时,它想要将其作为新日历打开并将其存档在“其他日历”下。

是否有办法(不使用文件 - 在Outlook中导入)指定日历应在打开时自动导入现有日历?

更新:澄清一下,每个VEVENT都与一个“约会”有关。然而,可能会或可能不会出现反复出现的模式。

-Mike

7 个答案:

答案 0 :(得分:3)

我不认为这会奏效。 Outlook在导入这些“开放”规范方面受到限制。尝试导入具有多个联系人的vCard文件时,我遇到了类似的问题。我最终拆分文件并在Outlook中编写脚本以导入目录中的所有文件。

答案 1 :(得分:3)

这可以使用互联网日历(比如Google)。 Outlook 2007具有订阅Internet日历的功能(在“帐户设置”下),Outlook 2003具有可用的开源插件。您可以创建“只读”的可访问Feed。格式类似于

BEGIN:VCALENDAR  
PRODID:-//XYZ Corp//My Product//EN  
VERSION:2.0  
CALSCALE:GREGORIAN  
METHOD:PUBLISH  
X-WR-CALNAME:My Calendar  
X-WR-TIMEZONE:(GMT-05:00) Eastern Time (US & Canada)  
BEGIN:VEVENT  
DTSTART:20061021T100000Z  
DTEND:20061021T130000Z  
DTSTAMP:20090211T175526Z  
UID:5f98dfd5-ac72-4ae1-b3c2-799a4e7c91f9  
CLASS:PUBLIC  
CREATED:20071104T183833Z  
DESCRIPTION: My description text.  
LAST-MODIFIED:20071104T183833Z  
LOCATION: 123 Anywhere Street\; Anyplace, NJ 12345\; US  
SEQUENCE:0  
STATUS:CONFIRMED  
SUMMARY: My summary text.  
TRANSP:OPAQUE  
END:VEVENT  
BEGIN:VEVENT  
DTSTART:20061101T170000Z  
DTEND:20061101T180000Z  
DTSTAMP:20090211T175526Z  
UID:6eaef015-eb90-4e94-8e6c-0003b928969a  
CLASS:PUBLIC  
CREATED:20071104T183833Z  
DESCRIPTION: My description for number 2.  
LAST-MODIFIED:20071104T183833Z  
LOCATION: 123 Anywhere Street\; Anyplace, NJ 12345\; US  
SEQUENCE:0  
STATUS:CONFIRMED  
SUMMARY: My summary for #2.  
TRANSP:OPAQUE  
END:VEVENT  
END:VCALENDAR

答案 2 :(得分:2)

确保为每个VEVENT使用唯一的UID。如果您为每个VEVENT使用相同的UID,您将完全看到您描述的行为,因为只处理了唯一的UID并将其添加到日历中。

HTH。

答案 3 :(得分:1)

这是三场FIFA 2010前景比赛的一个例子,我猜这就是你要找的......

BEGIN:VCALENDAR

PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN

VERSION:2.0

METHOD:PUBLISH

X-CALSTART:20100611T140000Z

X-CALEND:20100711T201500Z

X-WR-RELCALID:{0000002E-5A22-AA75-713B-5C3715764495}

X-WR-CALNAME: World Cup Football Complete Match Schedule 2010 South Africa

BEGIN:VEVENT

CATEGORIES:World Cup Football Complete Match Schedule 2010 South Africa

CLASS:PUBLIC

CREATED:20100608T231102Z

DESCRIPTION:Group A\nFollow MarkThisDate on Twitter

    markthisdate 

DTEND:20100611T154500Z

DTSTAMP:20100513T100200Z

DTSTART:20100611T140000Z

LAST-MODIFIED:20100608T231102Z

LOCATION:Johannesburg 

PRIORITY:5

SEQUENCE:0

SUMMARY:South Africa - Mexico

TRANSP:TRANSPARENT

UID:005ef5a170ab453276aad021756e5fde@markthisdate.com

X-MICROSOFT-CDO-BUSYSTATUS:FREE

X-MICROSOFT-CDO-IMPORTANCE:1

END:VEVENT

BEGIN:VEVENT

CATEGORIES:World Cup Football Complete Match Schedule 2010 South Africa

CLASS:PUBLIC

CREATED:20100608T231102Z

DESCRIPTION:Group A\nFollow MarkThisDate on Twitter

    markthisdate 

DTEND:20100611T201500Z

DTSTAMP:20100513T100200Z

DTSTART:20100611T183000Z

LAST-MODIFIED:20100608T231102Z

LOCATION:Cape Town 

PRIORITY:5

SEQUENCE:0

SUMMARY:Uruguay - France

TRANSP:TRANSPARENT

UID:9660590c514358c5bceed9e75bed0222@markthisdate.com

X-MICROSOFT-CDO-BUSYSTATUS:FREE

X-MICROSOFT-CDO-IMPORTANCE:1

END:VEVENT

BEGIN:VEVENT

CATEGORIES:World Cup Football Complete Match Schedule 2010 South Africa

CLASS:PUBLIC

CREATED:20100608T231102Z

DESCRIPTION:Group B\nFollow MarkThisDate on Twitter

    markthisdate 

DTEND:20100612T131500Z

DTSTAMP:20100513T100200Z

DTSTART:20100612T113000Z

LAST-MODIFIED:20100608T231102Z

LOCATION:Nelson Mandela Bay/Port Elizabeth 

PRIORITY:5

SEQUENCE:0

SUMMARY:Korea Republic - Greece

TRANSP:TRANSPARENT

UID:5a9eaca2435fb52e1c95ddb786f82efa@markthisdate.com

X-MICROSOFT-CDO-BUSYSTATUS:FREE

X-MICROSOFT-CDO-IMPORTANCE:1

END:VEVENT

END:VCALENDAR

答案 4 :(得分:1)

这应该是可能的:/以下适用于谷歌,并随从加载随从。 Outlook似乎有一些问题,会继续寻找。

注意 - 当你使用文件> import等时,这确实可以正确导入到outlook中,它只是双击,导致它只加载第一个事件。

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Insert something
X-WR-TIMEZONE:Insert something
X-WR-CALDESC:

BEGIN:VEVENT
DTSTART:20110909T180000Z
DTEND:20110909T200000Z
DTSTAMP:20110722T004312Z
UID:et53m4on1ii70en7uuv1thjr58@google.com
CREATED:20110721T105553Z
DESCRIPTION:
LAST-MODIFIED:20110721T105554Z
LOCATION:Insert something
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Insert something
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT0H10M0S
END:VALARM
END:VEVENT

BEGIN:VEVENT
DTSTART:20110909T083000Z
DTEND:20110909T103000Z
DTSTAMP:20110722T004312Z
UID:e5fhdjff6vakjftnl3l9vjs64k@google.com
CREATED:20110721T105410Z
DESCRIPTION:
LAST-MODIFIED:20110721T111008Z
LOCATION:Auckland
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:Insert something
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Insert something
TRIGGER:-P0DT0H10M0S
END:VALARM
END:VEVENT

END:VCALENDAR

答案 5 :(得分:0)

确保文件的VCALENDAR部分中具有“ X-MS-OLK-FORCEINSPECTOROPEN:TRUE”。这允许具有多个VEVENT的ICS文件导入Outlook中的默认日历。没有创建新的日历。

答案 6 :(得分:0)

这有效:取下ICS文件,将其拖放到Outlook中的日历按钮上(在我的左下角)。这会将多个条目添加到默认日历,而当ICS文件包含多个事件时不提示任何情况。更新和删除倍数是我的下一个挑战。

双击同一文件将产生非常不同的结果:创建一个新的日历,并且忙碌指示器被忽略。我所描述的拖放操作使忙碌指示器保持完整,就像在ICS文件中一样

X-MS-OLK-FORCEINSPECTOROPEN:TRUE打开了第一个条目,因此可以批准并添加它。随后的事件将被忽略。

对于我来说,X-MS-OLK-FORCEINSPECTOROPEN:FALSE或完全删除该行都具有相同的结果。

此外,当我双击具有多个事件的ICS文件时,这就是我看到的:Outlook不完全兼容,因为创建了名为“无标题”的新日历。 Windows 10附带的邮件应用程序兼容,并且所有条目都正确添加到了日历中(可能是因为Win 10邮件应用程序只有1个日历?我不知道-我只为Outlook编写)