Import einer VCF-Datei mit mehreren Kontakten nach Outlook 365
Hallo zusammen,
unsere Gemeindereferentin hat einen neuen Rechner bekommen. Vom alten Rechner mit Thunderbird hat sie ihre Kontakte in eine VCF-Datei exportiert. Auf dem neuen Rechner wollten wir diese jetzt in Outlook 365 (ist vom Bistum vorgegeben) importieren, aber es wird immer nur der erste Kontakt importiert. Wie können wir alle Kontakte einlesen?
Im Internet wird das Problem oft beschrieben, eine halbwegs unkomplizierte Lösung habe ich aber nicht gefunden.
Danke im Voraus,
Sarek \\//_
unsere Gemeindereferentin hat einen neuen Rechner bekommen. Vom alten Rechner mit Thunderbird hat sie ihre Kontakte in eine VCF-Datei exportiert. Auf dem neuen Rechner wollten wir diese jetzt in Outlook 365 (ist vom Bistum vorgegeben) importieren, aber es wird immer nur der erste Kontakt importiert. Wie können wir alle Kontakte einlesen?
Im Internet wird das Problem oft beschrieben, eine halbwegs unkomplizierte Lösung habe ich aber nicht gefunden.
Danke im Voraus,
Sarek \\//_
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7167250640
Url: https://administrator.de/forum/import-einer-vcf-datei-mit-mehreren-kontakten-nach-outlook-365-7167250640.html
Ausgedruckt am: 22.12.2024 um 12:12 Uhr
16 Kommentare
Neuester Kommentar
Eine EXE habe ich da nicht gefunden.
Warst wohl noch nie auf GitHub 😉. Klick auf Releases Icon und tada ....Bittesehr
https://github.com/Rillke/Contact-Conversion-Wizard/releases/download/3. ...
https://github.com/Rillke/Contact-Conversion-Wizard/releases
Servus @SarekHL.
Hatte ich vor langer Zeit mal ein Powershell Outlook-Client-Skript dafür geschrieben das auch zusammengefasste (merged) vCard-Files verarbeitet. Es zerlegt das zusammengefasste vCard in mehrere separate und importiert diese einzeln.
p.s. Warum wurde aus Thunderbird nicht gleich in eine CSV exportiert? Die Zuordnung der CSV-Spalten lässt sich beim Import festlegen.
Grüße Uwe
Hatte ich vor langer Zeit mal ein Powershell Outlook-Client-Skript dafür geschrieben das auch zusammengefasste (merged) vCard-Files verarbeitet. Es zerlegt das zusammengefasste vCard in mehrere separate und importiert diese einzeln.
p.s. Warum wurde aus Thunderbird nicht gleich in eine CSV exportiert? Die Zuordnung der CSV-Spalten lässt sich beim Import festlegen.
<#
Import merged vCard(*.vcf) files into custom outlook contact folder
© @colinardo (administrator.de)
#>
# load assemblies
Add-Type -A System.Windows.Forms
Add-Type -A Microsoft.Visualbasic
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
# ask for vCard File with multiple contacts inside
$dlg = New-Object System.Windows.Forms.OpenFileDialog
$dlg.Multiselect = $true
$dlg.Title = "Select vCard files to import."
$dlg.Filter = "vCard Dateien|*.vcf"
if($dlg.ShowDialog() -ne 'OK'){
return
}
# ask for target contact folder
$contactfolder = $objOL.Session.PickFolder()
# create temporary folder vor extracted vCards
new-item -type dir "$env:TEMP\contacts" -Force | out-null
# extract vCards
$cnt=0
foreach($file in Get-Item -LiteralPath $dlg.FileNames){
# create single vCards from merged vCard files
[regex]::matches((Get-Content $file.Fullname -raw),'(?ism)^BEGIN:VCARD.*?END:VCARD').Captures | %{
$_.Groups[0].Value | out-file "$env:TEMP\contacts\contact_$((++$cnt)).vcf" -Encoding Default -Force
}
}
# process each vCard and import into outlook folder
foreach($file in ls "$env:TEMP\contacts" -File -Filter *.vcf){
write-host "Importing contact '$([regex]::match((Get-Content $file.Fullname -raw),'(?im)(?<=^FN:)[^\r\n]+').Value)'." -F Green
start outlook "/v `"$($file.Fullname)`""
while($objOL.Inspectors.Count -eq 0){sleep -Milliseconds 500}
try{
[void]$objOL.ActiveInspector().CurrentItem.Move($contactfolder)
}catch{}
}
# remove temp folder
remove-item "$env:TEMP\contacts" -Recurse -Force
# release resources
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objOL)
Grüße Uwe
Klappt hier in meinem Test mit beliebigen VCFs sowohl unter Office 2021 LTS als auch Office 2019 unter W10/11 auf unterschiedlichen Maschinen ohne Probleme. Scheint als wäre deine Office-Version problematisch oder du wechselst manuell den Fokus während des Skripts, oder die Kiste ist einfach zu langsam.
Ohne mehr Angaben zur Umgebung rätselraten. Du kannst aber mal testweise das try{} catch{} auskommentieren.
Du könntest aber auch einfach die im Temp-Ordner (
Dazu nur alles ab Zeile 31 im Skript auskommentieren/entfernen, ausführen, in den Ordner
Das war's von meiner Seite.
Ohne mehr Angaben zur Umgebung rätselraten. Du kannst aber mal testweise das try{} catch{} auskommentieren.
Du könntest aber auch einfach die im Temp-Ordner (
%temp%\contacts
) einzeln abgelegten Kontakte einfach auf das Outlook Fenster droppen und dann jedes einzeln speichern, das ist das selbe was das Skript macht nur eben durch dich selbst 😉.Dazu nur alles ab Zeile 31 im Skript auskommentieren/entfernen, ausführen, in den Ordner
%temp%\contacts
wechseln und dort die einzelnen VCFs rausziehen und auf Outlook droppen. Done.Das war's von meiner Seite.
Zitat von @SarekHL:.
Das hat nichts gebracht. Nun werden zwar ganz viele Kontaktfenster geöffnet, aber keines geschlossen und kein Kontakt importiert.
Dann hast du zu viel auskommentiert.Das hat nichts gebracht. Nun werden zwar ganz viele Kontaktfenster geöffnet, aber keines geschlossen und kein Kontakt importiert.
Siehst Du noch eine Chance? Ansonsten würde ich mir in VB (das ist die einzige Programmiersprache, die ich ausreichend beherrsche) einen Parser schreiben, der die VCF-Datei ausliest (ähnlich wie Dein Script) und dann eine CSV-Datei daraus macht.
Brauchst du doch gar nicht, exportiere wie oben bereits geschrieben direkt in Thunderbird als CSV, der beherrscht das auch. 😉 Nur in Outlook beim Import die Feldzuweisung vornehmen und schon passt das.Zum Thema Parsen: Da gibt es seeehr viel zu berücksichtigen wenn es wirklich universell auf alle mögiichen VCF Varianten passen soll, stell dir das nicht zu einfach vor, ließ dir mal die RFC dazu durch.
Für einfache homogene VCFs und nur fest bestimmte Felder, OK, das ist ja dann pillepalle, aber den einmaligen Aufwand hier wirklich nicht wert, aber musst du selbst entscheiden.
Ach es gibt so viele Möglichkeiten, kannst z.B. auch das VCF File in ein Google Konto importieren und von dort aus dann nach CSV exportieren ... 1001 Way to g. Wundert mich eigentlich warum du damit so viel Zeit verschwendest, du bist nun ja auch schon einige Zeit dabei .
https://www.slipstick.com/outlook/people/import-vcards-in-bulk-into-outl ...
Viel Erfolg.
https://www.slipstick.com/outlook/people/import-vcards-in-bulk-into-outl ...
Kannst Du es oben temporär anpassen, wie Du es meinst?
# try{
[void]$objOL.ActiveInspector().CurrentItem.Move($contactfolder)
# }catch{}
Zitat von @SarekHL:
So geht es - bzw. weil Du was von "zu langsam" sagtest, habe ich den Wert bei "sleep" noch auf 1000 erhöht.
Ja das ist Rechner spezifisch, manche brauchen da etwas mehr Zeit für das "exposing" der ActiveInspector-Property.So geht es - bzw. weil Du was von "zu langsam" sagtest, habe ich den Wert bei "sleep" noch auf 1000 erhöht.
Was sollte dieser jetzt auskommentierte Teil machen?
Der sollte nur evt. Fehlermeldungen unterdrücken die auftauchen obwohl der Kontakt trotzdem richtig importiert wird. Das ist dem COM-Objekt geschuldet, das kommt da manchmal nicht mit und wirft dann eine überflüssige Fehlermeldung.