最近写了个小程序,实现将PocketOutlook中联系人导出导出。
实现如下功能:
1,将ppc中联系人导出xml;
2,将xml文件内容导入联系人;
3,清空联系人中的数据。
使用了PocketOutlook.dll 很好用。不过找这个文件花了不少时间。下载点击:http://www.cnblogs.com/Files/vicky8081/pimstore.zip
namespace sy.gdsc.zd.contact
{
class ContactContent
{
public int id = 0;
public string name = null; //姓名
public string duty = null; //职位
public string depart = null; //部门
public string company = null; //公司名称
public string officeNum = null; //办公电话
//public string companyAdd = null; //公司地址
public string email = null; //e-mail
public string mobileNum = null; //移动电话
public string file = null; //文件名
public string sort = null; //种类
}
class ContactAction
{
/// <summary>
/// 通过微软提供的PocketOutlook导出通讯录内容
/// </summary>
/// <returns></returns>
public List<ContactContent> ExportContact(System.Windows.Forms.ProgressBar pbar)
{
List<ContactContent> result = new List<ContactContent>();
ApplicationClass outlookApp;
outlookApp = new ApplicationClass();
outlookApp.Logon(234);
PocketOutlook.Folder contactsFolder =
outlookApp.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
PocketOutlook.Items contacts = (PocketOutlook.Items)contactsFolder.Items;
pbar.Maximum = contacts.Count;
pbar.Minimum = 0;
int i = 0;
foreach (ContactItem item in contacts)
{
pbar.Value = i++;
ContactContent contact = new ContactContent();
contact.name = item.FirstName;
contact.duty = item.Title;
contact.company = item.CompanyName;
contact.officeNum = item.BusinessTelephoneNumber;
contact.email = item.Email1Address;
contact.mobileNum = item.MobileTelephoneNumber;
contact.file = item.FileAs;
contact.id = item.oid;
contact.sort = item.Categories;
result.Add(contact);
}
outlookApp.Logoff();
return result;
}
/// <summary>
/// 将xml转换为contact
/// </summary>
/// <returns></returns>
public List<ContactContent> ImportContact(XmlDocument import, System.Windows.Forms.ProgressBar pbar)
{
List<ContactContent> result = new List<ContactContent>();
pbar.Maximum = import["pi"].ChildNodes.Count;
pbar.Minimum = 0;
int i = 0;
foreach (XmlNode xnf in import["pi"])
{
pbar.Value = i++;
XmlElement xe = (XmlElement)xnf;
ContactContent contact = new ContactContent();
contact.name = xe.GetAttribute("firstname");
contact.duty = xe.GetAttribute("job_title");
contact.company = xe.GetAttribute("companyname");
contact.officeNum = xe.GetAttribute("work_phone1");
contact.email = xe.GetAttribute("email1");
contact.mobileNum = xe.GetAttribute("mobile_phone");
contact.file = xe.GetAttribute("fileas");
contact.id = int.Parse(xe.GetAttribute("oid"));
contact.sort = xe.GetAttribute("sort");
result.Add(contact);
}
return result;
}
/// <summary>
///将contacts写入联系人
/// </summary>
/// <param name="contacts"></param>
/// <returns></returns>
public bool WriteAddressList(List<ContactContent> contacts, System.Windows.Forms.ProgressBar pbar)
{
bool result = false;
ApplicationClass outlookApp;
outlookApp = new ApplicationClass();
outlookApp.Logon(213);
PocketOutlook.Folder contactsFolder =
outlookApp.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
PocketOutlook.Items items = (PocketOutlook.Items)contactsFolder.Items;
pbar.Maximum = contacts.Count;
pbar.Minimum = 0;
try
{
for(int i = 0;i < contacts.Count; i++)
{
pbar.Value = i;
ContactItem item = (ContactItem)items.Add();
item.FirstName = contacts[i].name;
item.Title = contacts[i].duty;
item.CompanyName = contacts[i].company;
item.BusinessTelephoneNumber = contacts[i].officeNum;
item.Email1Address = contacts[i].email;
item.MobileTelephoneNumber = contacts[i].mobileNum;
item.FileAs = contacts[i].file;
item.Categories = contacts[i].sort;
item.Save();
}
}
catch (System.Exception )
{
}
outlookApp.Logoff();
return result;
}
/// <summary>
/// 根据联系人输入xml格式
/// </summary>
/// <param name="contacts"></param>
/// <returns></returns>
public XmlDocument OutPutString(List<ContactContent> contacts,System.Windows.Forms.ProgressBar pbar)
{
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmldecl;
xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "UTF-16", null);
xmlDoc.AppendChild(xmldecl);
XmlNode xmlNode = xmlDoc.CreateElement("pi");
xmlDoc.AppendChild(xmlNode);
pbar.Maximum = contacts.Count;
pbar.Minimum = 0;
for(int i = 0; i<contacts.Count; i++)
{
pbar.Value = i;
XmlNode contact = xmlDoc.CreateElement("contact");
XmlAttribute oid = xmlDoc.CreateAttribute("oid");
oid.Value = contacts[i].id.ToString();
XmlAttribute fileas = xmlDoc.CreateAttribute("fileas");
fileas.Value = contacts[i].file;
XmlAttribute firstname = xmlDoc.CreateAttribute("firstname");
firstname.Value = contacts[i].name;
XmlAttribute companyname = xmlDoc.CreateAttribute("companyname");
companyname.Value = contacts[i].company;
XmlAttribute email1 = xmlDoc.CreateAttribute("email1");
email1.Value = contacts[i].email;
XmlAttribute mobile_phone = xmlDoc.CreateAttribute("mobile_phone");
mobile_phone.Value = contacts[i].mobileNum;
XmlAttribute department = xmlDoc.CreateAttribute("department");
department.Value = contacts[i].depart;
XmlAttribute job_title = xmlDoc.CreateAttribute("job_title");
job_title.Value = contacts[i].duty;
XmlAttribute work_phone1 = xmlDoc.CreateAttribute("work_phone1");
work_phone1.Value = contacts[i].officeNum;
XmlAttribute sort = xmlDoc.CreateAttribute("sort");
sort.Value = contacts[i].sort;
contact.Attributes.Append(oid);
contact.Attributes.Append(fileas);
contact.Attributes.Append(firstname);
contact.Attributes.Append(companyname);
contact.Attributes.Append(email1);
contact.Attributes.Append(mobile_phone);
contact.Attributes.Append(department);
contact.Attributes.Append(job_title);
contact.Attributes.Append(work_phone1);
contact.Attributes.Append(sort);
xmlNode.AppendChild(contact);
}
return xmlDoc;
}
public void ClearAllContact(System.Windows.Forms.ProgressBar pbar)
{
ApplicationClass outlookApp;
outlookApp = new ApplicationClass();
outlookApp.Logon(213);
PocketOutlook.Folder contactsFolder =
outlookApp.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
PocketOutlook.Items items = (PocketOutlook.Items)contactsFolder.Items;
pbar.Maximum = items.Count;
pbar.Minimum = 0;
int j = 0;
for (int i = items.Count - 1; i >= 0; i--)
{
pbar.Value = j++;
items.Remove(1);
}
}
}
}