Поделиться через


Импорт XML-данных встречи в объекты встреч Outlook (Outlook)

В этом разделе показано, как считывать данные о встречах в формате XML, сохранять их в объектах Microsoft Outlook AppointmentItem в календаре по умолчанию и возвращать объекты встреч в массиве.

| Логотип MVP

|Приведенные ниже примеры кода создал Хельмут Обертаннер (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 и обратная связь.