Problema con la importación de contactos desde una versión diferente de Outlook a través del código .net

StackOverflow https://stackoverflow.com/questions/7333429

  •  27-10-2019
  •  | 
  •  

Pregunta

Creé un código para importar contactos desde Outlook.Aplicación creada en .net framework con versión 4.0 en C #.

El código es el siguiente:

OutLook._Application outlookObj = new OutLook.Application();
outlookObj.ActiveExplorer();
OutLook.MAPIFolder contactsFolder = (OutLook.MAPIFolder)outlookObj.Session
    .GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);
comboDelimiter.Properties.Items.Clear();
if (!comboDelimiter.Properties.Items.Contains("Default"))
{
    comboDelimiter.SelectedText = "Default";
    comboDelimiter.Properties.Items.Add("Default");
}
//VERIFYING THE CUSTOM FOLDER IN OUT LOOK .
foreach (OutLook.MAPIFolder subFolder in contactsFolder.Folders)
{
    if (!comboDelimiter.Properties.Items.Contains(subFolder.Name))
    {
        comboDelimiter.Properties.Items.Add(subFolder.Name);
    }
}

Esta función se utiliza para leer contactos de la carpeta particular del contacto de Outlook -

private DataSet GetContactsFromFolder(string folderName)
{
    object missing = System.Reflection.Missing.Value;
    DataSet ds = new DataSet();
    //create instance of Outlook application and Outlook Contacts folder.
    try
    {
        OutLook.MAPIFolder fldContacts = null;
        OutLook._Application outlookObj = new OutLook.Application();
        if (folderName == "Default")
        {
            fldContacts = (OutLook.MAPIFolder)outlookObj.Session
                .GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);
        }
        else
        {

            OutLook.MAPIFolder contactsFolder = (OutLook.MAPIFolder)outlookObj.Session
                .GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);
            //VERIFYING THE CUSTOM FOLDER IN OUT LOOK .
            foreach (OutLook.MAPIFolder subFolder in contactsFolder.Folders)
            {
                if (subFolder.Name == folderName)
                {
                    fldContacts = subFolder;
                    break;
                }
            }
        }
        DataTable dt = new DataTable();
        for (int i = 0; i < 12; i++)
        {
            dt.Columns.Add("Col" + i,Type.GetType ("System.String"));
        }
        foreach (Microsoft.Office.Interop.Outlook._ContactItem contactItem in fldContacts.Items)
        {
            {
                DataRow dr = dt.NewRow();
                dr[0] = Convert.ToString(contactItem.FirstName);
                dr[1] = Convert.ToString(contactItem.LastName);
                dr[2] = Convert.ToString(contactItem.MobileTelephoneNumber);
                if (!string.IsNullOrEmpty(contactItem.Email1Address))
                    dr[3] = contactItem.Email1Address;
                else
                    dr[3] = contactItem.Email2Address;
                dr[4] = Convert.ToString(contactItem.HomeAddress);
                dr[5] = Convert.ToString(contactItem.BusinessTelephoneNumber);
                dr[6] = Convert.ToString(contactItem.HomeTelephoneNumber);
                dr[7] = Convert.ToString(contactItem.CompanyName);
                dr[8] = Convert.ToString(contactItem.Birthday);
                dr[9] = Convert.ToString(contactItem.Anniversary);
                dr[10] = Convert.ToString(contactItem.JobTitle);
                dr[11] = Convert.ToString(contactItem.HomeFaxNumber);
                dt.Rows.Add(dr);
            }
        }
        ds.Tables.Add(dt);
    }
    catch (System.Exception ex)
    {
        Console.WriteLine(ex);
    }
    return ds;
}

Agregué dll para esto, es de Microsoft.Office.Interop.Outlook with version 9.2 Description es Microsoft.Office 11.0 Object Library

Importa el contacto de la versión de Outlook 2007 pero
cuando estoy importando un contacto de Outlook 2010, no lo estoy importando.

¿Cómo resolver este problema?

¿Fue útil?

Solución

Está trabajando con componentes de interoperabilidad de MS Office específicos de la versión.

Lo que debe utilizar es un marco / biblioteca de MS Office que no sea específico de la versión, como:

NetOffice : la forma más sencilla de utilizar Office en .NET http://netoffice.codeplex.com/

.NET Wrapper Assemblies para acceder a Microsoft Office, Excel, Word, Outlook, PowerPoint, Access, Project

Con características como:

  • Integración con Office sin limitaciones de versión
  • Todos los objetos, métodos, propiedades y eventos de las versiones de Office 2000, 2002, 2003, 2007, 2010 están incluidos
  • Sintáctica y semánticamente idéntica a los ensamblados de interoperabilidad de Microsoft Sin obstáculos de implementación, sin registros problemáticos, sin dependencias, sin ensamblajes de interoperabilidad, sin necesidad de VSTO

Aquí hay un ejemplo de cómo obtener una lista de contactos de Outlook en C #: http://netoffice.codeplex.com/wikipage?title=Outlook_Example05

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top