Импорт XML-данных встречи в объекты встреч Outlook (Outlook)
В этом разделе показано, как считывать данные о встречах в формате XML, сохранять их в объектах Microsoft Outlook AppointmentItem в календаре по умолчанию и возвращать объекты встреч в массиве.
|
|Приведенные ниже примеры кода создал Хельмут Обертаннер (Helmut Obertanner). Helmut является самым ценным специалистом Майкрософт с опытом работы с инструментами разработки Microsoft Office в Microsoft Visual Studio и Microsoft Office Outlook.|
Следующие примеры управляемого кода написаны на C# и Visual Basic. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели. Для Outlook используйте Visual Studio и основную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили PIA Outlook 2013 и добавили ссылку на компонент библиотеки объектов Microsoft Outlook 15.0 в Visual Studio. Используйте следующие примеры кода в ThisAddIn
классе надстройки Outlook (с помощью средств разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals
.
Дополнительные сведения об использовании PIA Outlook для разработки управляемых решений Outlook см. в статье Добро пожаловать в справочник по сборке основного взаимодействия Outlook.
В следующих примерах Sample
кода содержится CreateAppointmentsFromXml
метод класса , реализованный как часть проекта надстройки Outlook. Каждый проект добавляет ссылку на Outlook PIA на основе пространства имен Microsoft.Office.Interop.Outlook.
Метод CreateAppointmentsFromXml
принимает два входных параметра: application и xml:
приложение — это доверенный объект приложения Outlook.
Параметр xml — это либо строка XML, либо строка, представляющая путь к правильному XML-файлу. Для целей следующих примеров кода XML разделяет данные встреч с помощью следующих XML-тегов:
Данные встречи | Разграничивающий XML-тег |
---|---|
Весь набор данных встречи | <Встречи> |
Каждая встреча в наборе | <Назначение> |
Время начала встречи | <Starttime> |
Время окончания встречи | <время окончания> |
Название встречи | <Тема> |
Место встречи | <Расположение> |
Подробные сведения о встрече | <Тела> |
В следующем примере показаны входные данные для параметра 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
использует реализацию MICROSOFT COM модели DOM для загрузки и обработки XML-данных, которые предоставляет xml . CreateAppointmentsFromXml
Сначала проверяет, указывает ли xml допустимый источник XML-данных. Если источник правильный, то этот метод загружает данные в XML-документ DOMDocument. CreateAppointmentsFromXml
В противном случае вызывает исключение. Дополнительные сведения о модели DOM XML см. в разделе DOM.
Для каждого дочернего узла встречи, разделенного тегом <appointment> в XML-данных, CreateAppointmentsFromXml
выполняет поиск определенных тегов, использует DOM для извлечения данных и назначает данные соответствующим свойствам объекта AppointmentItem : Start, End, Subject, Location и Body. CreateAppointmentsFromXml
затем сохраняет встречу в календаре по умолчанию.
CreateAppointmentsFromXml
использует метод Add класса List( type) в пространстве имен System.Collections.Generic для агрегирования этих объектов 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 и обратная связь.