Office文档模型深入---Outlook文档模型与开发实战(1)
一. PIA简介与获取
Office原本提供的接口操作是基于COM的,PIA(Primary Interop Assemblies,主互操作程序集)提供以托管方式来操作office对象模型,换句话说,PIA提供了 .Net对office对象的编程操作。PIA是系统中Office对象对外的接口,所以也不要想只要有excel.dll就可以不装Excel了....
PIA针对不同的office版本也有相应的版本,不同的PIA之间不兼容现象很严重,在部署时候根据客户机的Office版本安装相应的PIA是很有必要的,刚开始接触Excel操作时候本机上的Excel导入模块工作正常,一到客户机上根本不能工作就是这个问题,关于他们的兼容性上的问题,可以参见http://go.microsoft.com/fwlink/?LinkId=30833,这里面列举了一部分可能遇到的问题。
PIA可以字节从Microsoft上下载:
2010版的下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938fe8ad-583b-4bd7-a345-23250dc15855
2003版的下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad
因为本机环境,本章实例采用2010版,后面提供的实例也不保证office2010意外版本工作正常,不过与其他版本在接口上相差不大,对本文不会产生影响。
二. 主要顶级类介绍
安装完PIA之后,首先在项目中引用Microsoft.Office.Interop.Outlook,之后可以使用以下类:
1.Application
与Excel相同,Application代表Outlook主应用程序,是Outlook中最高等级的类,提供了对Outlook程序的操作。这个类具有的重要成员如下:
CreateItem方法: 用来创建电子邮件,约会等。
Exploers属性: 用来在Outlook程序中显示指定内容。
Inspectprs属性: 用来访问单电子邮件,约会等单个项。
下面展示一个具体而微的Outlook项目中的HelloWorld:
3 MailItem mi=(MailItem)thisApp.CreateItem(OlItemType.olMailItem);
4 mi.Subject = "This is Subject";
5 mi.To = "ssybb1988@163.com";
6 mi.Body = "Hello World";
7 mi.Importance = OlImportance.olImportanceNormal;
8 mi.Display(true);
通过Outlook.ApplicationClass()来获取一个对当前电脑上Outlook实例的调用,再使用Application.CreateItem创建一个MailItem(代表一个邮件),代码运行后,邮件会显示在界面上,这样一个简单的HelloWorld就完成了。
2.Explorer
Explorer表示显示项(电子邮件,约会等)的文件夹窗口,这个类主要用来对显示窗口进行操作,并且提供了文件夹窗口状态更改相关的事件。
Explorer的常用用法包括 通过调用Application.Explorers属性获取当前的Explorer集合, Application.ActiveExplorer()来获取当前具有焦点的Explorer对象,MAPIFolder的GetExplorer()来获取当前文件夹的Explorer集合,这里提供的是对各个基本文件夹的调用,具体应用会在介绍完后面的例子后给出。
3.Inspector
Inspector表示对Outlook程序中单个项(电子邮件,约会等)的窗口, 这个类主要针对窗口操作提供方法和属性,与Explorer类似,也提供窗口状态更改相关事事件。
因为Inspector类的定位与Explorer类似,因此对他的常用操作也与Explorer大同小异,通过Application获取Insepctor集合与当前Inspector,具体的例子会在后面给出
4.MAPIFolder
MAPIFolder是整个Outlook中最核心的类,由它提供了Outlook的基本功能,Outlook提供了有16个基本的MAPIFolder,他们由Microsoft.Office.Interop.Outlook.OlDefaultFolders枚举来定义,分别是如下:
其中Other包括了olPublicFoldersAllPublicFolders,olFolderConflicts,olFolderSyncIssues,olFolderLocalFailures,olFolderServerFailures,olFolderManagedEmail等6个仅在拥有Exchange账户时会出现的文件夹,剩下的14个项目提供额诸如约会,日程,收件箱,发件箱,Rss等基本文件夹,可以满足我们对Outlook功能的绝大多数要求,Outlook也提供有自定义文件夹的功能,代码如下:
3 {
4 Microsoft.Office.Interop.Outlook.Application thisApp = new Outlook.ApplicationClass();
5 Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)
6 thisApp.Session.GetDefaultFolder
7 (Outlook.OlDefaultFolders.olFolderInbox);
8 string userName = (string)thisApp.ActiveExplorer()
9 .Session.CurrentUser.Name;
10 Outlook.MAPIFolder customFolder = null;
11 try
12 {
13 customFolder = (Outlook.MAPIFolder)inBox.Folders.Add(userName,
14 Outlook.OlDefaultFolders.olFolderInbox);
15 MessageBox.Show("You have created a new folder named " +
16 userName + ".");
17 inBox.Folders[userName].Display();
18 }
19 catch (Exception ex)
20 {
21 MessageBox.Show("The following error occurred: " + ex.Message);
22 }
23 }
24 }
5.MailItem
顾名思义,MailItem表示了一个电子邮件项, 它一般会存在发件箱(olFolderSentMail),收件箱(olFolderInbox),已发邮件箱(olFolderOutbox)中。MailItem提供了创建,发送,查看邮件列表的方法和属性。在开始的例子中我们提供了创建一个邮件的简单的示例。
6.AppointmentItem
AppointmentItem类表示了“日历”文件夹中的的会议,定期约会,一次性约会等。AppopintmentItem类提供了针对会议的转发和响应等操作,以及对会议的创建和详细信息查看。会议创建的示例代码如下:
3 {
4 Microsoft.Office.Interop.Outlook.Application thisApp = new Outlook.ApplicationClass();
5 Outlook.AppointmentItem agendaMeeting = (Outlook.AppointmentItem)
6 thisApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.
7 olAppointmentItem);
8
9 if (agendaMeeting != null)
10 {
11 agendaMeeting.MeetingStatus =
12 Microsoft.Office.Interop.Outlook.OlMeetingStatus.olMeeting;
13 agendaMeeting.Location = "Conference Room";
14 agendaMeeting.Subject = "Discussing the Agenda";
15 agendaMeeting.Body = "Let's discuss the agenda.";
16 agendaMeeting.Start = new DateTime(2005, 5, 5, 5, 0, 0);
17 agendaMeeting.Duration = 60;
18 Outlook.Recipient recipient =
19 agendaMeeting.Recipients.Add("Nate Sun");
20 recipient.Type =
21 (int)Outlook.OlMeetingRecipientType.olRequired;
22 ((Outlook._AppointmentItem)agendaMeeting).Send();
23 }
24 }
7.TaskItem
TaskItem对应任务文件夹(olFolderTasks) ,表示的是一段时间内要完成的任务,提供任务的基本信息和对任务的查看创建,通过调用Application.CreateItem()来实现,调用时传入值 Microsoft.Office.Interop.Outlook.OlItemType.olTaskItem。
8.ContactItem
这个也是比较常用的功能,ContactItem包含了联系人的各种信息,这个类同时提供了对联系人的基本操作和对联系人的查询
新增联系人:
3 {
4 Microsoft.Office.Interop.Outlook.Application thisApp = new Outlook.ApplicationClass();
5 Outlook.ContactItem newContact = (Outlook.ContactItem)
6 thisApp.CreateItem(Outlook.OlItemType.olContactItem);
7 try
8 {
9 newContact.FirstName = "Jo";
10 newContact.LastName = "Berry";
11 newContact.Email1Address = "somebody@example.com";
12 newContact.CustomerID = "123456";
13 newContact.PrimaryTelephoneNumber = "(425)555-0111";
14 newContact.MailingAddressStreet = "123 Main St.";
15 newContact.MailingAddressCity = "Redmond";
16 newContact.MailingAddressState = "WA";
17 newContact.Save();
18 newContact.Display(true);
19 }
20 catch
21 {
22 MessageBox.Show("The new contact was not saved.");
23 }
24 }
查找联系人:
2 private void ThisApplication_Startup(object sender, System.EventArgs e)
3 {
4 FindContactEmailByName("John", "Evans");
5 }
6
7 private void FindContactEmailByName(string firstName, string lastName)
8 {
9 Microsoft.Office.Interop.Outlook.Application thisApp = new Outlook.ApplicationClass();
10 Outlook.NameSpace outlookNameSpace = thisApp.GetNamespace("MAPI");
11 Outlook.MAPIFolder contactsFolder =
12 outlookNameSpace.GetDefaultFolder(
13 Microsoft.Office.Interop.Outlook.
14 OlDefaultFolders.olFolderContacts);
15
16 Outlook.Items contactItems = contactsFolder.Items;
17
18 try
19 {
20 Outlook.ContactItem contact =
21 (Outlook.ContactItem)contactItems.
22 Find(String.Format("[FirstName]='{0}' and "
23 + "[LastName]='{1}'", firstName, lastName));
24 if (contact != null)
25 {
26 contact.Display(true);
27 }
28 else
29 {
30 MessageBox.Show("The contact information was not found.");
31 }
32 }
33 catch (Exception ex)
34 {
35 throw ex;
36 }
37 }
对Outlook的基本内容的介绍告一段落,后面会根据具体情况寻找一些具体的主题给出详细讲解和示例,希望大家能喜欢。
本节示例下载