2009-08-10 2 views
1

Все,экспорт местных контактов Outlook в визитную карточку

Я пытаюсь написать программу, которая будет экспортировать все контакты, сохраненные в локальном файле PST кругозора в VCards

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

я видел пример здесь, но это, кажется, более приспособленным обмена сервера, а не локальная установка кругозора

какие-либо идеи о том, как я бы об этом?

ответ

2

Возможно, это подходит.

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

Вот роднее способ сделать это в 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.

Смежные вопросы