экспортировать локальные контакты Outlook в Vcard - PullRequest
1 голос
/ 10 августа 2009

All

Я пытаюсь написать программу, которая будет экспортировать все контакты, хранящиеся в локальном pst-файле outlook, на vcards

Я видел несколько условно-бесплатных программ, которые будут это делать, но они кажутся довольно дорогими (50 баксов +)

Я видел пример здесь, но он больше подходит для сервера обмена, чем для локальной установки outlook

есть идеи, как мне поступить?

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

Это может подойти.

Sub VCardOut()
Dim oFolder As Object
Dim oContact As ContactItem
Dim sPath As String
Dim sName As String
Dim sVCard As String
Dim f As Object
Dim fs As Object
Dim i As Integer


    Set fs = CreateObject("Scripting.FileSystemObject")
    Set oFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)

    sPath = "C:\Docs\"

'Проблема с форматированием и обратной косой чертой

    '' Loop through all of the items in the folder.
    For i = 1 To oFolder.Items.Count
        Set oContact = oFolder.Items(i)

        sName = oContact.FullNameAndCompany & ".vcf"

        If Trim(sName) = ".vcf" Then sName = oContact.EntryID & ".vcf"

        Set f = fs.CreateTextFile(sPath & sName)

        sVCard = "BEGIN:VCARD" & vbCrLf
        sVCard = sVCard & "VERSION:2.1" & vbCrLf

        sVCard = sVCard & "FN:" & oContact.FullName & vbCrLf

        sVCard = sVCard & "N:" & oContact.LastName & ";" & oContact.FirstName & ";" _
            & oContact.MiddleName & ";" & oContact.Title & ";" & vbCrLf

        sVCard = sVCard & "NICKNAME:" & oContact.NickName & vbCrLf

        sVCard = sVCard & "ADR;HOME;ENCODING=QUOTED-PRINTABLE:;;" _
            & Replace(oContact.HomeAddress & "", vbCrLf, "=0D=0A") & ";" _
            & Replace(oContact.HomeAddressCity & "", vbCrLf, "=0D=0A") & ";" _
            & Replace(oContact.HomeAddressCountry & "", vbCrLf, "=0D=0A") & vbCrLf

        sVCard = sVCard & "ADR;WORK;ENCODING=QUOTED-PRINTABLE:;;" _
            & Replace(oContact.BusinessAddress & "", vbCrLf, "=0D=0A") & ";" _
            & Replace(oContact.BusinessAddressCity & "", vbCrLf, "=0D=0A") & ";" _
            & Replace(oContact.BusinessAddressCountry & "", vbCrLf, "=0D=0A") & vbCrLf

        sVCard = sVCard & "BDAY:" & Format(oContact.Birthday, "yyyymmdd") & vbCrLf

        sVCard = sVCard & "EMAIL;PREF;INTERNET:" & oContact.Email1Address & vbCrLf

        '' Repeat as necessary for each email address
        sVCard = sVCard & "EMAIL;INTERNET:" & oContact.Email2Address & vbCrLf

        sVCard = sVCard & "ORG:" & oContact.CompanyName & ";" & oContact.Department & vbCrLf

        sVCard = sVCard & "TEL;CELL;VOICE:" & oContact.MobileTelephoneNumber & vbCrLf

        sVCard = sVCard & "TEL;HOME;FAX:" & oContact.HomeFaxNumber & vbCrLf

        sVCard = sVCard & "TEL;HOME;VOICE:" & oContact.HomeTelephoneNumber & vbCrLf

        sVCard = sVCard & "TEL;WORK;FAX:" & oContact.BusinessFaxNumber & vbCrLf

        sVCard = sVCard & "TEL;WORK;VOICE:" & oContact.BusinessTelephoneNumber & vbCrLf

        sVCard = sVCard & "TITLE:" & oContact.JobTitle & vbCrLf

        sVCard = sVCard & "URL;HOME:" & oContact.PersonalHomePage & vbCrLf

        sVCard = sVCard & "URL;WORK:" & oContact.BusinessHomePage & vbCrLf

        sVCard = sVCard & "REV:20090225T232716Z" & vbCrLf
        sVCard = sVCard & "End: VCARD"

        f.WriteLine sVCard
        f.Close
    Next

End Sub
0 голосов
/ 23 декабря 2015

Вот более родной способ сделать это в C #:

using Microsoft.Office.Interop.Outlook;
using System;
using System.Collections.Generic;
using System.Text;

namespace ExportOutlookContacts
{
    class Program
    {
        static void Main(string[] args)
        {

            Items OutlookItems;
            Application outlookObj;
            MAPIFolder Folder_Contacts;

            outlookObj = new Application();
            Folder_Contacts = outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
            OutlookItems = Folder_Contacts.Items;

            for (int i = 0; i < OutlookItems.Count; i++)
            {
                ContactItem contact = (ContactItem)OutlookItems[i + 1];
                Console.WriteLine(contact.FullName);
                // https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.olsaveastype.aspx
                contact.SaveAs(string.Format(@"C:\TEMP\Contacts\{0}.vcf", contact.FullName), 6);
            }

            Console.WriteLine("Done!");
            Console.ReadLine();
        }
    }
}

ПРИМЕЧАНИЕ: Вам необходимо добавить ссылку на Microsoft.Office.Interop.Outlook

Это позволит экспортировать все контакты в текущем профиле Outlook в несколько файлов .VCF.

BTW Вы можете объединить все файлы VCF в один:

copy /B *.vcf CombinedContacts.vcf

Таким образом, вы можете легко импортировать этот файл в GMail или IPhone.

...