Problem beim Importieren von Kontakten aus Outlook einer anderen Version über .net-Code

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

  •  27-10-2019
  •  | 
  •  

Frage

Ich habe Code zum Importieren von Kontakten aus Outlook erstellt.Erstellt Anwendung im .net Framework mit Version 4.0 in C #.

Code ist wie folgt -

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

Diese Funktion wird zum Lesen von Kontakten aus dem jeweiligen Ordner des Outlook-Kontakts verwendet -

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

Ich habe DLL hinzugefügt, ist von Microsoft.Office.Interop.Outlook with version 9.2 Description ist Microsoft.Office 11.0 Object Library

Es importiert Kontakte aus der Outlook 2007-Version, aber
Wenn ich einen Kontakt aus Outlook 2010 importiere, wird kein Kontakt importiert.

Wie kann dieses Problem behoben werden?

War es hilfreich?

Lösung

Sie arbeiten mit versionenspezifischen MS Office Interop-Komponenten.

Sie müssen ein nicht versionäres MS Office-Framework / eine MS Office-Bibliothek verwenden, z. B.:

NetOffice - Der einfachste Weg, Office in .NET zu verwenden http://netoffice.codeplex.com/

.NET Wrapper-Assemblys für den Zugriff auf Microsoft Office, Excel, Word, Outlook, PowerPoint, Access, Project

Mit Funktionen wie:

  • Office-Integration ohne Versionsbeschränkungen
  • Alle Objekte, Methoden, Eigenschaften und Ereignisse der Office-Versionen 2000, 2002, 2003, 2007, 2010 sind enthalten
  • Syntaktisch und semantisch identisch mit den Microsoft Interop-Assemblys Keine Bereitstellungshürden, keine problematische Registrierung, keine Abhängigkeiten, keine Interop-Assemblys, keine Notwendigkeit für VSTO

    Hier finden Sie ein Beispiel, wie Sie eine Liste von Outlook-Kontakten in C # abrufen können: http://netoffice.codeplex.com/wikipage?title=Outlook_Example05

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top