全部,
我正在尝试编写一个程序,将存储在 Outlook 本地 pst 文件中的所有联系人导出到 vcards
我见过几个共享软件程序可以做到这一点,但它们似乎相当昂贵(50 美元以上)
我在这里看到了一个示例,但它似乎更适合交换服务器而不是本地安装的 Outlook
关于我将如何解决这个问题的任何想法?
全部,
我正在尝试编写一个程序,将存储在 Outlook 本地 pst 文件中的所有联系人导出到 vcards
我见过几个共享软件程序可以做到这一点,但它们似乎相当昂贵(50 美元以上)
我在这里看到了一个示例,但它似乎更适合交换服务器而不是本地安装的 Outlook
关于我将如何解决这个问题的任何想法?
这可能适合。
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
这是在 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 文件。
顺便说一句,您可以将所有 VCF 文件合二为一:
copy /B *.vcf CombinedContacts.vcf
这样您就可以轻松地将此文件导入 GMail 或 iPhone。