Office文档模型深入---Outlook文档模型与开发实战(1)

简介   本篇为Office文档模型深入系列第4篇,原计划是Excel的图表,之后是Word,因为项目转手需要总结Outlook,先改变下顺序,后面的内容会慢慢补上。本篇为Outlook子系列的第一篇,主要介绍下outlook命名空间下个各个主要顶级类,包括他们的功能定位和一些常用的方法,可以实现的任务。另外针对之前大家对excel的反馈对Office PIA再做一些介绍。

 

 一. 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:

2              Outlook.Application thisApp  = new  Outlook.ApplicationClass();
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也提供有自定义文件夹的功能,代码如下:  

 2           private   void  CreateCustomFolder()
 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类提供了针对会议的转发和响应等操作,以及对会议的创建和详细信息查看。会议创建的示例代码如下:

 2           private   void  ThisApplication_Startup( object  sender, System.EventArgs e)
 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包含了联系人的各种信息,这个类同时提供了对联系人的基本操作和对联系人的查询

新增联系人: 

 2           private   void  AddContact()
 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          }

 

 查找联系人:

 1 
 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的基本内容的介绍告一段落,后面会根据具体情况寻找一些具体的主题给出详细讲解和示例,希望大家能喜欢。

 

本节示例下载 

/Files/shenyubao/OutLookDemo1.rar 

转载于:https://www.cnblogs.com/shenyubao/archive/2011/01/29/1947194.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值