Outlook Kontakte exportieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Goof.

    Outlook Kontakte exportieren

    Hallo zusammen,

    ich möchte meine Kontakte exportieren. Leider bleibt das Programm an der Stelle hängen => Fehler:

    Quellcode

    1. Dim olAnwendung As Microsoft.Office.Interop.Outlook.Application
    2. Dim olNamespace As Microsoft.Office.Interop.Outlook.NameSpace
    3. Dim olKontaktordner As Microsoft.Office.Interop.Outlook.MAPIFolder
    4. Dim olKontakte As Microsoft.Office.Interop.Outlook.Items
    5. Dim olKontakt As Microsoft.Office.Interop.Outlook.ContactItem
    6. Dim Unterordner As Microsoft.Office.Interop.Outlook.Folders
    7. Dim AnzahlUnterordner As Integer
    8. Dim i As Integer
    9. olAnwendung = New Microsoft.Office.Interop.Outlook.Application
    10. olNamespace = olAnwendung.GetNamespace("MAPI")
    11. olKontaktordner = olNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts)
    12. olKontakte = olKontaktordner.Items
    13. Debug.Print(olKontaktordner.Name)
    14. ListBox1.Items.Add(olKontaktordner.Name)
    15. For Each olKontakt In olKontakte ' =>>>>>> Fehler
    16. Debug.Print(" " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address)
    17. ListBox1.Items.Add(" " & ii & " " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address & " " & olKontakt.BusinessTelephoneNumber)
    18. ii = ii + 1
    19. Next
    20. Unterordner = olKontaktordner.Folders
    21. AnzahlUnterordner = Unterordner.Count
    22. For i = 1 To AnzahlUnterordner
    23. olKontakte = Unterordner.Item(i).Items
    24. Debug.Print(Unterordner.Item(i).Name)
    25. ListBox1.Items.Add(Unterordner.Item(i).Name)
    26. For Each olKontakt In Unterordner.Item(i).Items
    27. Debug.Print(" " & ii & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address)
    28. ListBox1.Items.Add(" " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address & " " & olKontakt.BusinessTelephoneNumber)
    29. ii = ii + 1
    30. Next
    31. Next


    System.InvalidCastException: "Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Outlook.ContactItem" umgewandelt werden.

    An was könnte das liegen?

    So geht es leider auch nicht:

    Quellcode

    1. ' Create Outlook application.
    2. Dim objOutlook As Microsoft.Office.Interop.Outlook.Application = New Microsoft.Office.Interop.Outlook.Application()
    3. ' Get NameSpace and Logon.
    4. Dim objOutlookoNS As Microsoft.Office.Interop.Outlook.NameSpace = objOutlook.GetNamespace("mapi")
    5. objOutlookoNS.Logon("Outlook", Missing.Value, False, True)
    6. Dim outLookContacts As Microsoft.Office.Interop.Outlook.MAPIFolder = objOutlookoNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts)
    7. Dim outLookItems As Microsoft.Office.Interop.Outlook.Items = outLookContacts.Items
    8. Dim dtContacts As New DataTable
    9. dtContacts.Columns.Add("Name")
    10. dtContacts.Columns.Add("Email")
    11. Dim drContact As DataRow
    12. 'Dim oCt
    13. For Each oCt As Microsoft.Office.Interop.Outlook.ContactItem In outLookItems
    14. drContact = dtContacts.NewRow
    15. drContact("Name") = oCt.FullName
    16. drContact("Email") = oCt.Email1Address
    17. dtContacts.Rows.Add(drContact)
    18. Next
    19. DataGridView1.DataSource = dtContacts
    20. objOutlookoNS.Logoff()
    21. objOutlookoNS = Nothing
    22. outLookItems = Nothing
    23. objOutlook = Nothing


    Vielen Dank für Eure Hilfe.

    Goog
    Hab auch mal ggogle angeworfen und mir was zusammengestöpselt was bei mir auch etwas bringt (und mir aufzeigt, dass ich veraltete Einträge in meinen Kontakten habe).
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' Create Outlook application.
    2. Dim objOutlook As Outlook.Application = New Outlook.Application()
    3. ' Get NameSpace and Logon.
    4. Dim objOutlookoNS As Outlook.NameSpace = objOutlook.GetNamespace("mapi")
    5. objOutlookoNS.Logon("Outlook", Reflection.Missing.Value, False, True)
    6. Dim outLookContacts As Outlook.MAPIFolder = objOutlookoNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    7. Dim outLookItems As Outlook.Items = outLookContacts.Items
    8. Dim Recipient As Outlook.Recipient
    9. Dim ExchangeUser As Outlook.ExchangeUser
    10. Dim address As String = String.Empty
    11. For i As Integer = 1 To outLookContacts.Items.Count
    12. Dim contact = DirectCast(outLookItems.Item(i), ContactItem)
    13. address = String.Empty
    14. If contact.Email1AddressType.ToLower() = "ex" Then
    15. Recipient = objOutlookoNS.CreateRecipient(contact.LastNameAndFirstName)
    16. Try
    17. ExchangeUser = Recipient.AddressEntry.GetExchangeUser()
    18. If (ExchangeUser IsNot Nothing) Then
    19. address = ExchangeUser.PrimarySmtpAddress
    20. address = "''" & address & "''"
    21. Else
    22. address = contact.Email1Address
    23. End If
    24. Catch ex As System.Runtime.InteropServices.COMException
    25. address = "The contact information was not found (by Email)."
    26. End Try
    27. Else
    28. address = contact.Email1Address
    29. End If
    30. MessageBox.Show(contact.LastNameAndFirstName & ": " & contact.Email1DisplayName & vbCrLf & address)
    31. Next
    32. objOutlookoNS.Logoff()
    33. objOutlookoNS = Nothing
    34. outLookItems = Nothing
    35. objOutlook = Nothing

    Ich weiß nicht was Du willst, etwas komplett fertiges? Dann bist Du zumindest in diesem Unterforum leider falsch. Der Code funktioniert, es gibt aber noch kleine Verbesserungen, die ich aktuell eingebaut habe.
    Was da nicht steht, aber notwendig ist damit der Code überhaupt lüft ist, sich über NuGet das Microsoft.Office.Interop.Outlook zu installieren und die erforderlichen Verweise zu erzeugen. Das ist aber wirklich kein Problem.
    Der Code selbst funktioniert durchaus, wie gesagt ein paar Prüfunugen auf "IsNot Nothing" helfen den Code zu optimieren.

    Auf der Arbeit habe ich kurzerhand meine Kontakte damit überprüft und durchaus festgestellt, dass ich da eininge von nacharbeiten muss. Ein Miniprojekt aber durchaus hilfreich ^^
    Hallo Goof
    Die Fehlermeldung sagt ja eigentlich schon was das Problem ist. Du hast ein Object in deinen ContactItem.
    Also musst du diese herausfiltern, z.B. indem du in der ForEach-Schlaufe die ContactItem eine Obecjt zuweist und dies auf den Typ ContactItem prüfst.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim olAnwendung As Microsoft.Office.Interop.Outlook.Application
    2. Dim olNamespace As Microsoft.Office.Interop.Outlook.NameSpace
    3. Dim olKontaktordner As Microsoft.Office.Interop.Outlook.MAPIFolder
    4. Dim olKontakte As Microsoft.Office.Interop.Outlook.Items
    5. Dim olKontaktObj As Object
    6. Dim olKontakt As Microsoft.Office.Interop.Outlook.ContactItem
    7. Dim Unterordner As Microsoft.Office.Interop.Outlook.Folders
    8. Dim AnzahlUnterordner As Integer
    9. Dim i As Integer
    10. Dim ii As Integer
    11. olAnwendung = New Microsoft.Office.Interop.Outlook.Application
    12. olNamespace = olAnwendung.GetNamespace("MAPI")
    13. olKontaktordner = olNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    14. olKontakte = olKontaktordner.Items
    15. Debug.Print(olKontaktordner.Name)
    16. ListBox1.Items.Add(olKontaktordner.Name)
    17. For Each olKontaktObj In olKontakte ' =>>>>>> Fehler
    18. olKontakt = TryCast(olKontaktObj, Outlook.ContactItem)
    19. If olKontakt IsNot Nothing Then
    20. olKontakt = CType(olKontaktObj, Outlook.ContactItem)
    21. Debug.Print(" " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address)
    22. ListBox1.Items.Add(" " & ii & " " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address & " " & olKontakt.BusinessTelephoneNumber)
    23. ii = ii + 1
    24. End If
    25. Next
    26. Unterordner = olKontaktordner.Folders
    27. AnzahlUnterordner = Unterordner.Count
    28. For i = 1 To AnzahlUnterordner
    29. olKontakte = Unterordner.Item(i).Items
    30. Debug.Print(Unterordner.Item(i).Name)
    31. ListBox1.Items.Add(Unterordner.Item(i).Name)
    32. For Each olKontaktObj In Unterordner.Item(i).Items
    33. olKontakt = TryCast(olKontaktObj, Outlook.ContactItem)
    34. If olKontakt IsNot Nothing Then
    35. Debug.Print(" " & ii & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address)
    36. ListBox1.Items.Add(" " & olKontakt.FirstName & " " & olKontakt.LastName & " " & olKontakt.Email1Address & " " & olKontakt.BusinessTelephoneNumber)
    37. ii = ii + 1
    38. End If
    39. Next
    40. Next