简介   本篇为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

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

  1. PowerDesigner(九)-模型文档编辑器(生成项目文档)

    模型文档编辑器 PowerDesigner的模型文档(Model  Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程. 模型文 ...

  2. 九、模型文档编辑器(生成项目文档)

    模型文档编辑器 PowerDesigner的模型文档(Model  Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程. 模型文 ...

  3. 工程监测管理平台、工程数据看板、工程总览、动态模型、数据分析、数据跟踪、建筑工地、数据报表、警点管控、现场记录、观测记录、测点管理、模型管理、文档管理、墙体下沉、成员管理、axure原型、产品原型

    工程监测管理平台.工程数据看板.工程总览.动态模型.数据分析.数据跟踪.建筑工地.数据报表.警点管控.现场记录.观测记录.测点管理.模型管理.文档管理.墙体下沉.成员管理.axure原型.产品原型   ...

  4. Office 2003 打开RMS权限保护文档时出错

    公司内装了RMS服务器,12月11日突然出现问题,Office 2003 打开RMS权限保护文档时出错,截屏如下图. 网上找不到相关文献,开始以为是RMS服务问题,重装RMS服务器问题依旧,百思不得其 ...

  5. java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署 本源码技 ...

  6. 搜索引擎的检索模型-查询与文档的相关度计算

    1. 检索模型概述 搜索结果排序时搜索引擎最核心的部分,很大程度度上决定了搜索引擎的质量好坏及用户满意度.实际搜索结果排序的因子有很多,但最主要的两个因素是用户查询和网页内容的相关度,以及网页链接情况 ...

  7. BIM模型HLoD设计文档

    //作者:迷途的小书童 //微信公众号:g0415shenweri Bim模型Hlod设计文档 Bim模型的渲染我们采用Hlod的解决方案来解决大规模的模型渲染的问题. 我们参考cesiumgs的3d ...

  8. 缀写风控模型评审文档与部署监控文档的要点

    模型开发好后,能不能在真实生产环境中使用,是需要通过模型评审会议来决定的. 模型评审会议一般由业务方(策略方)和模型团队组织,通过模型评审文档内容的讲解,来确定后续的工作事项(调整/review/上线 ...

  9. 文档查询匹配的方法:布尔模型,向量空间模型

    文档查询匹配的方法:布尔模型,向量空间模型 文档表示:词袋方法Bag-of-Words Approach • 在 IR 中表示文档(和查询)的传统方法: 记录出现的单词(术语; 通常,加上每个文档中的 ...

最新文章

  1. 基于BERT模型的文本分类研究 TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
  2. python面试常用问题_Python面试中最常见的25个问题-结束
  3. nyoj-976-Youth的最大化(贪心+二分)
  4. python源码文件_从源代码生成Python文件
  5. windows下jenkins常见问题填坑
  6. 远离疲倦,告别非理性思维
  7. 启动Tomcat时报错,一大堆的
  8. Dennis Ritchie, father of Unix and C, dies
  9. 计算机系统分析师高级试题及答案,2013年计算机软考系统分析师试题及答案1
  10. Promise简(resolve,reject,catch)
  11. 一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
  12. matlab中利用xy求取多项式z,matlab基础练习题
  13. matplotlib:图形绘制常用增加修饰和设置参数
  14. meld安装启动报错解决
  15. Centos 8 搭建samba文件共享服务(超详细)
  16. Illumina的MiSeq™Dx系统在中国获得核准
  17. 已解决SyntaxError:expected ‘:‘
  18. 直方图均衡化、规定化、局部直方图均衡化、直方图统计
  19. Ubuntu 命令大全 Ubuntu技巧 (转)
  20. 懂点前端——对CSS中的Padding、Border、Margin属性的理解

热门文章

  1. oracle sequrnce_Oracle Sqlldr简单用法
  2. C++获取当前系统时间并格式化输出
  3. QT编程中遇到的问题总结
  4. 图像卷积与滤波知识点整理(2)
  5. HTML5实践 -- 三步实现响应式设计
  6. 网络协议分层及报文格式大全
  7. 嘉年华回顾丨阿里云吕漫漪带你一览POLARDB整体架构设计...
  8. 假如银行错转1000万,自己没动,只拿其中的利息是否非法?
  9. linux php和java环境变量配置_Linux下Java环境变量的安装与配置
  10. jenkins 插件目录_三十二张图告诉你如何用Jenkins构建SpringBoot