Importieren von Termindaten im XML-Format in Outlook-Terminobjekte (Outlook)

In diesem Thema wird gezeigt, wie in XML formatierte Termindaten importiert, die Daten in Microsoft Outlook AppointmentItem -Objekten im Standardkalender gespeichert und die Terminobjekte in einem Array zurückgegeben werden.

| MVP-Logo

|Helmut Obertanner hat die folgenden Codebeispiele zur Verfügung gestellt. Helmut ist ein Microsoft Most Valuable Professional mit Erfahrung in Microsoft Office-Entwicklungstools in Microsoft Visual Studio und Microsoft Office Outlook.|

Die folgenden Beispiele für verwalteten Code sind in C# und Visual Basic geschrieben. Um ein verwaltetes Codebeispiel von .NET Framework auszuführen, das ein Component Object Model (COM) aufrufen muss, müssen Sie eine Interopassembly verwenden, die verwaltete Schnittstellen definiert und den COM-Objekten in der Object Model-Typbibliothek zuordnet. Verwenden Sie für Outlook Visual Studio und die primäre Interopassembly (PIA) von Outlook. Bevor Sie verwaltete Codebeispiele für Outlook 2013 ausführen, stellen Sie sicher, dass Sie die Outlook 2013-PIA installiert und einen Verweis auf die Komponente Microsoft Outlook 15.0-Objektbibliothek in Visual Studio hinzugefügt haben. Verwenden Sie die folgenden Codebeispiele in der ThisAddIn Klasse eines Outlook-Add-Ins (mit Office Developer Tools für Visual Studio). Das Objekt der Anwendung im Code muss ein vertrauenswürdiges Outlook- Anwendungsobjekt sein, das von ThisAddIn.Globals bereitgestellt wird. Weitere Informationen zur Verwendung der Outlook-PIA zum Entwickeln verwalteter Outlook-Lösungen finden Sie unter Willkommen bei der Referenz zur primären Outlook-Interopassembly. Die folgenden Codebeispiele enthalten die CreateAppointmentsFromXml -Methode der -Klasse, die Sample als Teil eines Outlook-Add-In-Projekts implementiert wird. Jedes Projekt fügt einen Verweis auf die Outlook-PIA hinzu, die auf dem Microsoft.Office.Interop.Outlook-Namespace basiert. Die CreateAppointmentsFromXml -Methode akzeptiert zwei Eingabeparameter: application und xml:

  • application ist ein vertrauenswürdiges Outlook Application-Objekt .

  • xml ist eine XML-Zeichenfolge oder eine Zeichenfolge, die einen Pfad zu einer gültigen XML-Datei darstellt. In den folgenden Codebeispielen trennt XML Termindaten mithilfe der folgenden XML-Tags:

Termindaten Begrenzendes XML-Tag
Gesamte Gruppe von Termindaten <Termine>
Jeder Termin in der Gruppe <Termin>
Startzeit eines Termins <Starttime>
Endzeit eines Termins <Endtime>
Titel eines Termins <Betreff>
Position eines Termins <Lage>
Details eines Termins <Körper>

Das folgende Beispiel zeigt Eingabedaten für den Parameter 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> 

Die CreateAppointmentsFromXml -Methode verwendet die Microsoft COM-Implementierung des XML-DOM (Document Object Model), um die XML-Daten zu laden und zu verarbeiten, die xml bereitstellt. CreateAppointmentsFromXml überprüft zunächst, ob xml eine gültige Quelle von XML-Daten angibt. Falls ja, werden die Daten in ein XML-Dokument ( DOMDocument ) geladen. Andernfalls löst CreateAppointmentsFromXml eine Ausnahme aus. Weitere Informationen zum XML-DOM finden Sie unter DOM. Für jeden untergeordneten Terminknoten, der durch das <Termintag> in den XML-Daten getrennt ist, CreateAppointmentsFromXml sucht nach bestimmten Tags, verwendet das DOM zum Extrahieren der Daten und weist die Daten den entsprechenden Eigenschaften eines AppointmentItem-Objekts zu: Start, End, Subject, Location und Body. CreateAppointmentsFromXml speichert anschließend den Termin im Standardkalender. CreateAppointmentsFromXml verwendet die Add-Methode der List( type) -Klasse im System.Collections.Generic-Namespace , um diese AppointmentItem-Objekte zu aggregieren. Nachdem die Methode alle Termine in den XML-Daten verarbeitet hat, gibt sie die AppointmentItem -Objekte in einem Array zurück. Das folgende Codebeispiel verwendet 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(); 
        } 
 
    } 
}

Das folgende Codebeispiel verwendet 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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.