Problema con la importación de contactos desde una versión diferente de Outlook a través del código .net
-
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?
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