Share via


Importar datos XML de cita en objetos de cita de Outlook (Outlook)

En este tema se muestra cómo leer datos de citas con marcado XML, guardar los datos en objetos Microsoft Outlook AppointmentItem del calendario predeterminado y devolver los objetos de citas en una matriz.

| Logotipo de MVP

|Helmut Obertanner proporciona los siguientes ejemplos de código. Helmut es un profesional más valioso de Microsoft con experiencia en herramientas de desarrollo de Microsoft Office en Microsoft Visual Studio y Microsoft Office Outlook.|

Los siguientes ejemplos de código administrado están escritos en C# y Visual Basic. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos. Para Outlook, use Visual Studio y el ensamblado de interoperabilidad principal (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, asegúrese de que ha instalado el PIA de Outlook 2013 y ha agregado una referencia al componente Biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio. Use los siguientes ejemplos de código en la ThisAddIn clase de un complemento de Outlook (con Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals. Para obtener más información sobre el uso del PIA de Outlook para desarrollar soluciones administradas de Outlook, vea Bienvenido a la Referencia del ensamblado de interoperabilidad principal de Outlook. Los ejemplos de código siguientes contienen el CreateAppointmentsFromXml método de la Sample clase , implementado como parte de un proyecto de complemento de Outlook. Cada proyecto agrega una referencia al PIA de Outlook, que se basa en el espacio de nombres Microsoft.Office.Interop.Outlook. El CreateAppointmentsFromXml método acepta dos parámetros de entrada, application y xml:

  • application es un objeto de aplicación de Outlook de confianza.

  • xml es una cadena XML o una cadena que representa una ruta de acceso a un archivo XML válido. Para los ejemplos de código siguientes, el XML delimita los datos de citas mediante las siguientes etiquetas XML:

Datos de la cita Etiqueta XML delimitadora
Todo el conjunto de datos de la cita <Citas>
Cada cita del conjunto <Cita>
Hora de inicio de una cita <Starttime>
Hora de finalización de una cita <Endtime>
Título de una cita <Asunto>
Ubicación de una cita <Ubicación>
Detalles de una cita <Cuerpo>

En el ejemplo siguiente se muestran los datos de entrada para el parámetro 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> 

El CreateAppointmentsFromXml método usa la implementación COM de Microsoft del modelo de objetos de documento XML (DOM) para cargar y procesar los datos XML que proporciona xml . CreateAppointmentsFromXml primero comprueba si xml especifica un origen válido de datos XML. En ese caso, carga los datos en un documento XML (DOMDocument). De lo contrario, CreateAppointmentsFromXml produce una excepción. Para obtener más información sobre XML DOM, vea DOM. Para cada nodo secundario de cita delimitado por la <etiqueta de cita> en los datos XML, CreateAppointmentsFromXml busca etiquetas específicas, usa el DOM para extraer los datos y asigna los datos a las propiedades correspondientes de un objeto AppointmentItem : Start, End, Subject, Location y Body. CreateAppointmentsFromXml a continuación, guarda la cita en el calendario predeterminado. CreateAppointmentsFromXml usa el método Add de la clase List( type) en el espacio de nombres System.Collections.Generic para agregar estos objetos AppointmentItem . Una vez que el método ha procesado todas las citas contenidas en los datos XML, devuelve los objetos AppointmentItem en una matriz. El siguiente es el ejemplo de código en 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(); 
        } 
 
    } 
}

El siguiente es el ejemplo de código en 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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.