此主题说明了如何读取 XML 格式的约会数据,将数据保存到默认日历的 Microsoft Outlook AppointmentItem 对象中,然后在数组中返回约会对象。
|
|Helmut Obertanner 提供了以下代码示例。 Helmut 是 一位Microsoft最有价值专业人员 ,在 Visual Studio 和 Microsoft Office Outlook Microsoft Microsoft Office 开发工具方面具有专业知识。|
下面的托管代码示例是使用 C# 和 Visual Basic 编写的。 若要运行需调入组件对象模型 (COM) 的 .NET Framework 托管代码示例,您必须使用可定义托管接口并将其映射到对象模型类型库中的 COM 对象的互操作程序集。 对于 Outlook,请使用 Visual Studio 和 Outlook 主互作程序集 (PIA) 。 在运行 Outlook 2013 的托管代码示例之前,请确保已安装 Outlook 2013 PIA 并添加了对 Visual Studio 中 Outlook 15.0 对象库组件的Microsoft引用。 使用适用于 Visual Studio) 的 Office 开发人员工具的 Outlook 外接程序 (类中的以下代码示例 ThisAddIn 。 代码中的 应用程序对象必须是由 提供的受信任 Outlook ThisAddIn.Globals对象。
有关使用 Outlook PIA 开发托管 Outlook 解决方案的详细信息,请参阅 欢迎使用 Outlook 主互作程序集参考。
以下代码示例包含 CreateAppointmentsFromXml 类的 Sample 方法,作为 Outlook 外接程序项目的一部分实现。 每个项目添加到 Outlook PIA,基于 Microsoft.Office.Interop.Outlook命名空间的引用。
方法 CreateAppointmentsFromXml 接受两个输入参数: application 和 xml:
application 是受信任的 Outlook 应用程序 对象。
xml 是 XML 字符串或表示有效 XML 文件的路径的字符串。 就以下代码示例而言,XML 使用以下 XML 标记分隔约会数据:
| 约会数据 | 分隔 XML 标记 |
|---|---|
| 整个约会数据集 | <约会> |
| 约会集中的每个约会 | <约会> |
| 约会的开始时间 | <starttime> |
| 约会的结束时间 | <endtime> |
| 约会标题 | <主题> |
| 约会位置 | <位置> |
| 约会详细信息 | <身体> |
下面的代码示例展示了 xml 参数的输入数据。
<?xml version="1.0" encoding="utf-8" ?>
<appointments>
<appointment>
<starttime>2009-06-01T15:00:00</starttime>
<endtime>2009-06-01T16:15:00</endtime>
<subject>This is a Test-Appointment</subject>
<location>At your Desk</location>
<body>Here is the Bodytext</body>
</appointment>
<appointment>
<starttime>2009-06-01T17:00:00</starttime>
<endtime>2009-06-01T17:15:00</endtime>
<subject>This is a second Test-Appointment</subject>
<location>At your Desk</location>
<body>Here is the Bodytext</body>
</appointment>
<appointment>
<starttime>2009-06-01T17:00:00</starttime>
<endtime>2009-06-01T18:15:00</endtime>
<subject>This is a third Test-Appointment</subject>
<location>At your Desk</location>
<body>Here is the Bodytext</body>
</appointment>
</appointments>
方法 CreateAppointmentsFromXml 使用 XML 文档对象模型 (DOM) 的 Microsoft COM 实现来加载和处理 xml 提供的 XML 数据。
CreateAppointmentsFromXml 首先检查 xml 是否指定了有效的 XML 数据源。 如果有效,则它将数据加载到 XML 文档 DOMDocument 中。 否则, CreateAppointmentsFromXml 将引发异常。 有关 XML DOM 的详细信息,请参阅 DOM。
对于 XML 数据中由 <约会标记分隔的每个约会> 子节点, CreateAppointmentsFromXml 查找特定标记,使用 DOM 提取数据,并将数据分配给 AppointmentItem 对象的相应属性: Start、 End、 Subject、 Location 和 Body。 然后, CreateAppointmentsFromXml 将约会保存到默认日历。
CreateAppointmentsFromXml使用 System.Collections.Generic 命名空间中 List ( 类型) 类的 Add 方法聚合这些 AppointmentItem 对象。 在该方法处理了 XML 数据中的所有约会后,将在数组中返回 AppointmentItem 对象。
以下是 C# 代码示例。
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace OutlookAddIn1
{
class Sample
{
Outlook.AppointmentItem[] CreateAppointmentsFromXml(Outlook.Application application,
string xml)
{
// Create a list of appointment objects.
List<Outlook.AppointmentItem> appointments = new
List<Microsoft.Office.Interop.Outlook.AppointmentItem>();
XmlDocument xmlDoc = new XmlDocument();
// If xml is an XML string, create the document directly.
if (xml.StartsWith("<?xml"))
{
xmlDoc.LoadXml(xml);
}
else if (File.Exists(xml))
{
xmlDoc.Load(xml);
}
else
{
throw new Exception(
"The input string is not valid XML data or the specified file doesn't exist.");
}
// Select all appointment nodes under the root appointments node.
XmlNodeList appointmentNodes = xmlDoc.SelectNodes("appointments/appointment");
foreach (XmlNode appointmentNode in appointmentNodes)
{
// Create a new AppointmentItem object.
Outlook.AppointmentItem newAppointment =
(Outlook.AppointmentItem)application.CreateItem(Outlook.OlItemType.olAppointmentItem);
// Loop over all child nodes, check the node name, and import the data into the
// appointment fields.
foreach (XmlNode node in appointmentNode.ChildNodes)
{
switch (node.Name)
{
case "starttime":
newAppointment.Start = DateTime.Parse(node.InnerText);
break;
case "endtime":
newAppointment.End = DateTime.Parse(node.InnerText);
break;
case "subject":
newAppointment.Subject = node.InnerText;
break;
case "location":
newAppointment.Location = node.InnerText;
break;
case "body":
newAppointment.Body = node.InnerText;
break;
}
}
// Save the item in the default calendar.
newAppointment.Save();
appointments.Add(newAppointment);
}
// Return an array of new appointments.
return appointments.ToArray();
}
}
}
以下是 Visual Basic 代码示例。
Imports System.IO
Imports System.Xml
Imports Outlook = Microsoft.Office.Interop.Outlook
Namespace OutlookAddIn2
Class Sample
Function CreateAppointmentsFromXml(ByVal application As Outlook.Application, _
ByVal xml As String) As Outlook.AppointmentItem()
Dim appointments As New List(Of Outlook.AppointmentItem)
Dim xmlDoc As New XmlDocument()
If xml is an XML string, create the XML document directly.
If xml.StartsWith("<?xml") Then
xmlDoc.LoadXml(xml)
ElseIf (File.Exists(xml)) Then
xmlDoc.Load(xml)
Else
Throw New Exception("The input string is not valid XML data or the specified file doesn't exist.")
End If
' Select all appointment nodes under the root appointments node.
Dim appointmentNodes As XmlNodeList = xmlDoc.SelectNodes("appointments/appointment")
For Each appointmentNode As XmlNode In appointmentNodes
' Create a new AppointmentItem object.
Dim newAppointment As Outlook.AppointmentItem = _
DirectCast(application.CreateItem(Outlook.OlItemType.olAppointmentItem), _
Outlook.AppointmentItem)
' Loop over all child nodes, check the node name, and import the data into the appointment fields.
For Each node As XmlNode In appointmentNode.ChildNodes
Select Case (node.Name)
Case "starttime"
newAppointment.Start = DateTime.Parse(node.InnerText)
Case "endtime"
newAppointment.End = DateTime.Parse(node.InnerText)
Case "subject"
newAppointment.Subject = node.InnerText
Case "location"
newAppointment.Location = node.InnerText
Case "body"
newAppointment.Body = node.InnerText
End Select
Next
' Save the item in the default calendar.
newAppointment.Save()
appointments.Add(newAppointment)
Next
' Return an array of new appointments.
Return appointments.ToArray()
End Function
End Class
End Namespace
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。