Проблема с импортом контакта из Outlook другой версии через .net код - PullRequest
1 голос
/ 07 сентября 2011

Я создал код для импорта контакта из Outlook.Созданное приложение в .net framework с версией 4.0 на C #.

код выглядит следующим образом -

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);
    }
}

Эта функция используется для чтения контактов из определенной папки контакта 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;
}

Я добавил для этого dll, имеет значение Microsoft.Office.Interop.Outlook with version 9.2 Description, равное Microsoft.Office 11.0 Object Library

Импортирует контакт из версии Outlook 2007, но
, когда я импортирую контакт из Outlook2010, то это не импортирует контакт.

Как решить эту проблему?

1 Ответ

3 голосов
/ 07 сентября 2011

Вы работаете с компонентами взаимодействия MS Office для конкретной версии.

То, что вам нужно использовать, это среда / библиотека MS Office, отличная от версии, например:

NetOffice - Самый простой способ использования Office в .NET http://netoffice.codeplex.com/

.NET Wrapper сборки для доступа к Microsoft Office, Excel, Word, Outlook, PowerPoint, Access, Project

С такими функциями, как:

  • Интеграция с Office без ограничений версии
  • Все объекты, методы, свойства и события версий Office 2000, 2002, 2003, 2007, 2010 включены
  • Синтаксически и семантически идентичны сборкам взаимодействия Microsoft. Никаких препятствий для развертывания, проблемной регистрации, никаких зависимостей, сборок взаимодействия нет, VSTO

Вот пример того, как получить список контактов Outlook в C # здесь: http://netoffice.codeplex.com/wikipage?title=Outlook_Example05

...