Kontakte von Outlook aufs iPhone übertragen
Ein direkter Import von Microsoft Outlook Kontakten in das iPhone wird von Apple nicht unterstützt.Outlook selbst erlaubt für den Export von Daten nur wenig Möglichkeiten.
Im Menüpunkt Datei > Öffnen und Exportieren den Eintrag Importieren / Exportieren anklicken:
... und In Datei exportieren auswählen:
Untersützt werden lediglich Durch Trennzeichen getrennte Werte und Outlook-Datendatei (.pst):
Die erste Option erzeugte eine CSV Datei (Comma Separated Values), die zweite eine Datei im Microsoft eigenen PST (Personal STore) Format.
Da beide Format vom iPhone nicht unterstützt werden, gehe ich hier nicht weiter darauf ein.
Um Kontakte auszutauschen gibt es bereits seit vielen Jahren einen Standard, der von den meisten Programmen unterstützt wird: vCard auch bekannt unter VCF (Virtual Contact File)). Dieser Standard ist im RFC 6350 festgelegt und stellt die Basis für den folgenden Lösungsvorschlag dar.
Outlook bietet keine Möglichkeit alle Kontakte als vCards zu exportieren, lediglich das Speichern einzelner Kontakte ist möglich.
Beliebigen Kontakt öffnen und Datei > Speichern unter wählen.
Bei der erzeugten VCF Datei (in diesem Beispiel Max Mustermann.vcf) handelt es sich um eine normale Textdatei,
die mit einem beliebigen Text Editor geöffnet werden kann. Ich nutze dafür Notepad++, aber auch der in Windows verfübare
Editor ist für diesen Zweck vollkommen ausreichend.
In diesem Outlook Kontakt wurde lediglich der Vorname, der Nachname und die Mobilfunknummer eingepflegt.
Der Inhalt der VCF Datei ist entsprechend kurz und einfach zu verstehen:
BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=de:Mustermann;Max
FN:Max Mustermann
TEL;CELL;VOICE:+49 177 1234567
END:VCARD
Hinweis:
Abhängig von der benutzten Outlook Version (in diesem Beispiel Outlook 2019) können weitere Felder/Zeilen enthalten sein.
Outlook ist leider etwas "geschwätzig" und speichert teilweise Attribute, die nicht benötigt werden.
Zur Erklärung der kurzen VCF Datei:
- Jede vCard beginnt mit BEGIN:VCARD und endet mit END:VCARD.
- In der zweiten Zeile wird die Version der vCard angegeben: VERSION:2.1. Aktuell ist Version 4.0
- Das Attribut N enthält den Nachnamen und Vornamen, getrennt durch ein Semikolon: N;LANGUAGE=de:Mustermann;Max.
Die Information zur Sprache (;LANGUAGE=de) kann entfallen. - Das Attribut FN (Full Name) enthält den Kontakt in der Reihenfolge Vorname Nachname: FN:Max Mustermann
- Fehlt noch der Eintrag zur Mobilfunknummer: TEL;CELL;VOICE:+49 177 1234567, TEL = Telephone, CELL = Cell Phone = Mobilfunk, VOICE = Sprache
Wie kommt jetzt die vCard aufs iPhone?
Die einfachste Variante: über einen Browser bei www.icloud.com mit der Apple-ID anmelden und Kontakte auswählen.
In diesem Beispiel ist noch kein Kontakt in icloud.com vorhanden:
Durch Klicken auf das Zahnrad öffnet sich folgender Dialog:
Jetzt nur noch die abgespeicherte vCard auswählen und übernehmen. Und schon taucht das erste Problem auf:
Wo liegt der Fehler?
Ein Klick auf Mehr Infos hilft leider nicht weiter.
Lösung: Öffnen der VCF Datei mit einem Texteditor und Ändern der Version 2.1 in 3.0. Abspeichern und erneut in icloud.com importieren.
Das vCard Format von Outlook 2019 (Version 2.1) ist leider nicht mit dem vCard Format kompatibel, das icloud.com erwartet.
Hier scheint mindestens Version 3.0 erforderlich zu sein - auch wenn sich außer der Version in der vCard nichts geändert hat.
Alternativ zu Zahnrad und vCard importieren ... kann der Kontakt auch vom Explorer in icloud.com gezogen werden ("drag and drop").
Jetzt befindet sich der erste Kontakt auf iCloud:
Es wird empfohlen im iPhone unter Einstellungen > Benutzer > iCloud im Bereich APPS, DIE ICLOUD VERWENDEN die Kontakte auf Ein
zu stellen. Damit werden die Kontakte automatisch synchronisiert: eine importierte vCard steht automatisch auf dem iPhone zur Verfügung.
Und umgekehrt: wird ein neuer Kontakt im iPhone erstellt, wird dieser automatisch nach iCloud synchronisiert.
Wie übertrage ich jetzt dutzende oder hunderte von vCards auf das iPhone?
Da Outlook keinen Export aller Kontakte als vCards zur Verfügung stellt, schlagen einige Quellen einen Trick vor:
- In Outlook den Ordner Kontakte auswählen
- Einige Kontakte markieren und im Menü Start > Kontakt weiterleiten > Als Visitenkarte auswählen:
- Es wird eine neue E-Mail erstellt, die man z.B. an sich selbst adressiert und verschickt
- Im Posteingang die neue E-Mail öffnen und die vCards über Datei > Anlagen speichern auf der Festplatte ablegen
- Anschließend können die vCards einzeln (!!!) in icloud.com importiert werden.
Die Anzahl der Visitenkarten, die in einer E-Mail enthalten sein können, ist mir nicht bekannt.
Ich habe versucht alle Kontakte (ca. 550) in einer E-Mail weiterzuleiten. Dabei stürzte Outlook komplett ab.
Auch eine Reduktion auf 100 Kontakte führt zum Absturz. Mit 50 hat es funktioniert.
Es muss doch eine andere Möglichkeit geben die vCards zu erstellen?
Mit etwas Programmieraufwand in Outlook lassen sich nicht nur alle Kontakte auf einmal als vCards abspeichern,
es können auch die gewünschten Informationen extrahiert werden!
- Outlook starten und mit [Alt]-[F11] Microsoft Visual Basic for Applications öffnen - kurz VBA genannt.
- Im Projekt-Explorer Doppelklick auf ThisOutlookSession, um Code einzugeben
- Den unten aufgeführten Code hineinkopieren (bzw. den Link öffnen und den Code kopieren)
- Vor dem Ausführen des Codes noch ein paar Punkte beachten:
- Die in der vCard erforderlichen Felder/Attribute sind auf meine Anforderungen zugeschnitten.
Eine Erweiterung/Reduzierung ist selbstverständlich möglich - Um herauszufinden welche Felder in Outlook verfügbar sind, erstellt man einen beliebigen Kontakt,
z.B. Max Mustermann und füllt alle Felder aus, die in der vCard zur Verfügung stellen sollen. Anschließend
kann man alle Properties und Werte für diesen Kontakt auslesen und im Direktfenster anzeigen lassen:
If .LastName = "Mustermann" Then
For Each oPrp In .ItemProperties
Debug.Print , oPrp.Name, oPrp.Value
Next oPrp
End If - Im RFC 6350 sucht man dann die passenden Felder der vCard.
Noch einfacher geht es den Kontakt als vCard abzuspeichern und das Ergebnis in einem Texteditor zu öffnen - Nicht in jedem Kontakt sind alle Felder gefüllt. Es wird daher mit If-Bedingungen geprüft, ob der Feldinhalt nicht leer ist
und nur in diesem Fall eine Zeile in der vCard angefügt - Der Code arbeitet mit einem Zähler counter. Dieser Zähler ist Bestandteil des vCard Dateinamens.
Warum?
Gibt es zwei Kontakte mit demselben Vor- und Nachnamen würde der zweite Kontakt den ersten überschreiben.
Gäbe es zwei Max Mustermann, würde mit dem Zähler die erste Datei Max Mustermann (1).vcf und die zweite Max Mustermann (2).vcf heißen.
Natürlich kann man vor dem Erstellen einer Datei auch erst auf Vorhandensein einer Datei prüfen und bei Bedarf einen anderen Namen vergeben. - Um die icloud.com Import Probleme zu umgehen, wird die Version auf 3.0 gesetzt
- Um in eine Textdatei zu schreiben, werden in VBA oft andere Funktionen benutzt:
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("C:\_\vcards\" + .FullName + ".vcf", True)
CreateTextFile unterstützt keinen UTF-8 Zeichensatz, der wiederum von icloud.com benötigt wird um Umlaute und andere Sonderzeichen darzustellen - In der Zeile
fs.SaveToFile "C:\_\vcards\" + .FullName + " (" + Trim(Str(counter)) + ").vcf", 2
muss der Pfad C:\_\vcards\ entsprechend angepasst werden. - Auf Fehlerhandling wurde bewusst verzichtet, um den Code überschaubar zu halten
- Die in der vCard erforderlichen Felder/Attribute sind auf meine Anforderungen zugeschnitten.
- Mit diesem Code wurden in ein paar Sekunden alle meine 550 Kontakte als vCards auf der Festplatte abgelegt
- Für einen Massen Import der vCards im iPhone habe ich bisher keine Lösung gefunden und daher die 550 vCards einzeln (!) mit drag and drop in icloud.com Kontakte gezogen.
Geht es nicht einfacher?
Es gibt einige Tools im Internet, die entsprechende Import- und Export Funktionen nicht nur für Kontakte anbieten.
Allerdings sind diese durchweg kostenpflichtig. Für den einmaligen Import meiner Kontakte war ich nicht bereit in ein Tool zu investieren
und kann daher keine Empfehlung aussprechen. Einfach einmal nach z.B. iPhone Import Tools suchen.
Sub OutlookKontakte_vCard()
Dim oOutlook As Object ' Outlook.Application
Dim oNameSpace As Object 'Outlook.Namespace
Dim oOrdner As Object 'Outlook.Ordner
Dim oItem As Object
Dim oPrp As Object
Dim temp As String
Dim counter As Integer
Set oOutlook = GetObject(, "Outlook.Application") ' Outlook verbinden
Set oNameSpace = oOutlook.GetNamespace("MAPI")
Set oOrdner = oNameSpace.GetDefaultFolder(10) ' 10 = Ordner Kontakte
counter = 1
For Each oItem In oOrdner.items
With oItem
If .Class = 40 Then ' 40 = Kontakt
Set fs = CreateObject("ADODB.Stream")
fs.Type = 2 ' text
fs.Charset = "utf-8"
fs.Open
temp = "BEGIN:VCARD" + vbCrLf
temp = temp + "VERSION:3.0" + vbCrLf
temp = temp + "N:" + .LastName + ";" + .FirstName + vbCrLf
temp = temp + "FN:" + .FullName + vbCrLf
If .CompanyName > "" Then
temp = temp + "ORG:" + .CompanyName
If .Department > "" Then temp = temp + ";" + .Department
temp = temp + vbCrLf
End If
If .JobTitle > "" Then temp = temp + "TITLE:" + .JobTitle + vbCrLf
If .NickName > "" Then temp = temp + "NICKNAME:" + .NickName + vbCrLf
If .Body > "" Then temp = temp + "NOTE:" + Replace(.Body, vbCrLf, "\n") + vbCrLf
If .BusinessTelephoneNumber > "" Then temp = temp + "TEL;WORK;VOICE:" + .BusinessTelephoneNumber + vbCrLf
If .Business2TelephoneNumber > "" Then temp = temp + "TEL;WORK;VOICE:" + .Business2TelephoneNumber + vbCrLf
If .HomeTelephoneNumber > "" Then temp = temp + "TEL;HOME;VOICE:" + .HomeTelephoneNumber + vbCrLf
If .MobileTelephoneNumber > "" Then temp = temp + "TEL;CELL;VOICE:" + .MobileTelephoneNumber + vbCrLf
If .OtherTelephoneNumber > "" Then temp = temp + "TEL;VOICE:" + .OtherTelephoneNumber + vbCrLf
If .BusinessAddressCity > "" Then
temp = temp + "ADR;WORK:;;"
If .BusinessAddressStreet > "" Then temp = temp + .Replace(.BusinessAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .BusinessAddressCity > "" Then temp = temp + .BusinessAddressCity
temp = temp + ";"
If .BusinessAddressState > "" Then temp = temp + .BusinessAddressState
temp = temp + ";"
If .BusinessAddressPostalCode > "" Then temp = temp + .BusinessAddressPostalCode
temp = temp + ";"
If .BusinessAddressCountry > "" Then temp = temp + .BusinessAddressCountry
temp = temp + vbCrLf
End If
If .HomeAddressCity > "" Then
temp = temp + "ADR;HOME;PREF:;;"
If .HomeAddressStreet > "" Then temp = temp + .Replace(.HomeAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .HomeAddressCity > "" Then temp = temp + .HomeAddressCity
temp = temp + ";"
If .HomeAddressState > "" Then temp = temp + .HomeAddressState
temp = temp + ";"
If .HomeAddressPostalCode > "" Then temp = temp + .HomeAddressPostalCode
temp = temp + ";"
If .HomeAddressCountry > "" Then temp = temp + .HomeAddressCountry
temp = temp + vbCrLf
End If
If .OtherAddressCity > "" Then
temp = temp + "ADR;POSTAL:;;"
If .OtherAddressStreet > "" Then temp = temp + .Replace(.OtherAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .OtherAddressCity > "" Then temp = temp + .OtherAddressCity
temp = temp + ";"
If .OtherAddressState > "" Then temp = temp + .OtherAddressState
temp = temp + ";"
If .OtherAddressPostalCode > "" Then temp = temp + .OtherAddressPostalCode
temp = temp + ";"
If .OtherAddressCountry > "" Then temp = temp + .OtherAddressCountry
temp = temp + vbCrLf
End If
If .Email1Address > "" Then temp = temp + "EMAIL;PREF;INTERNET:" + .Email1Address + vbCrLf
If .Email2Address > "" Then temp = temp + "EMAIL;INTERNET:" + .Email2Address + vbCrLf
If .Email3Address > "" Then temp = temp + "EMAIL;INTERNET:" + .Email3Address + vbCrLf
If .Birthday > "" Then ' Format in Germany: 13.08.1960
If Len(.Birthday) = 10 And InStr(.Birthday, ".") Then
If CInt(Right(.Birthday, 4) > 1900) And CInt(Right(.Birthday, 4) < 2030) Then temp = temp + "BDAY:" + Right(.Birthday, 4) + "-" + Mid(.Birthday, 4, 2) + "-" + Left(.Birthday, 2) + vbCrLf
End If
End If
temp = temp + "END:VCARD" + vbCrLf
fs.WriteText temp
fs.SaveToFile "C:\_\vcards\" + .FullName + " (" + Trim(Str(counter)) + ").vcf", 2
counter = counter + 1
fs.Close
End If
End With
Next oItem
End Sub