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(200555500);
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写一个js向左滑动删除 交互特效的插件——Html5 touchmove

需求描述 需要实现类似QQ中对联系人的操作:向左滑动,滑出删除按钮。滑动超过一半时松开则自动滑到底,不到一半时松开则返回原处。 纯js实现 使用了h5的touchmove等事件,以及用js动态改变css3的translate属性来达到动画效果&#x…

Android----Fragments详解

Fragments 概念是在Android3.0版本就已经有了,3.0版本是Tab(平板)专用,后来在4.0以上的版本继续沿 用Fragments,改善了Activity的灵活性。 在没有Fragments之前,一个屏幕就只能放一个Activity,有了Fragments之后&#…

Hadoop Mapreduce分区、分组、二次排序过程详解

2019独角兽企业重金招聘Python工程师标准>>> 1、MapReduce中数据流动 (1)最简单的过程: map - reduce (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partition - redu…

基于 OpenFire 的TVBox管理平台开发笔记

目录 一、開發環境設置.... 3 1.1 JDK 安裝.... 3 1.2 MySql Server安裝.... 4 1.3 OpenFire安裝.... 6 1.4 Openfire Admin 功能.... 14 1.4.1 用戶摘要:.... 16 1.4.2 組摘要:.... 16 1.4.3 用戶組管理:.... 17 1.4.4 發送管理消息&#xf…

IIS错误与解决方法

转载于:https://www.cnblogs.com/NFFF/archive/2013/06/03/IIS%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%94%99%e8%af%af%e4%b8%8e%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95.html

最大后验估计_PR Ⅱ:贝叶斯估计/推断及其与MAP的区别

Probabilistic in Robotics Ⅱ: Bayesian Estimation/Inference统计推断旨在根据可观察到的事物来了解不可观察到的事物。即,统计推断是基于一个总体或一些样本中的某些观察变量(通常是影响)得出结论的过程,例如关于总体或样本中某…

深入理解并行编程-分割和同步设计(四)

原文链接 作者:paul 译者:谢宝友,鲁阳,陈渝 图1.1:设计模式与锁粒度 图1.1是不同程度同步粒度的图形表示。每一种同步粒度都用一节内容来描述。下面几节主要关注锁,不过其他几种同步方式也有类似的粒…

string类的实现(构造函数,析构函数,运算符重载)

String类的代码:class String { public:String(char* str""){_str new char[strlen(str) 1];strcpy(_str, str);}String(const String& str){_str new char[strlen(str._str) 1];strcpy(_str, str._str);}~String(){delete[] _str;}String& o…

html网页设计一个简单的用户登录页面

结果 代码 login.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>用户登录页面</title><link rel"stylesheet" href"./css/login.css"><script src"j…

ip聚合简介

练习一 本题选择&#xff1a;D 解释如下&#xff1a; 人事部 205.67.159.1110 0000 /27 培训部 205.67.159.1101 0000 /28 销售部 205.67.159.1100 0000 /28 先是培训部与销售部做IP聚合&#xff08;只有网络前缀位数相同才可以做ip聚合&#xff09; 保留相同的位数&…

微信公众平台消息接口开发(34)桃花运测试

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 桃花运 作者&#xff1a;方倍工作室 原文&#xff1a;http://www.cnblogs.com/txw1958/archive/2013/06/06/weixin-if34-peach-blossom-luck.html 桃花运&#xff0c;一般指得到异性缘的运气。而这种运气又常常蕴涵在…

sharepoint 2013 个人站点母版

最近做了个项目&#xff0c;&#xff0c;sharepoint 个人站点要求定制&#xff0c;&#xff0c;搞了好久不知引用的模板 在何位置&#xff0c;查了好多资料还是没有办法解决&#xff0c;&#xff0c;经过不懈的努力&#xff0c;终于找到了&#xff0c;现在记录下&#xff0c;做…

telnet不是内部或外部命令解决方法

在使用window系统在使用telnet命令时&#xff0c;会出现“telnet不是内部或外部命令”的错误。 这是因为windows默认没有开启telnet client 开启window的telnet客户端功能&#xff0c;命令就可以使用了。 1.打开控制面板 2.选择程序 3.选择启用或关闭windows功能 4.将telnet…

C# 自定义箭头组件

C#自定义箭头组件&#xff0c;效果如图&#xff1a; 实现的功能&#xff1a; 1&#xff09; 箭头方向属性左、右、上、下&#xff1b; 2&#xff09; 颜色渐变&#xff0c;且颜色任意调整&#xff1b; 3&#xff09; 箭头大小位置任意调整&#xff1b; 4&#xff09; 其他。 主…

Android的debug.keystore拒绝访问导致的生成异常及解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 构建Android应用程序的时候输出异常:[apkbuilder] keytool 错误: java.io.FileNotFoundException: C:\Users\my\.android\debug.keystore(拒绝访问.) 导致BUILD FAILED. ##异常原因: Android要求所有的应用程序必须有…

C语言猜数字游戏

程序代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<windows.h> #include<stdlib.h> #include<time.h> void menu() {printf("***********************\n");printf("** …

动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理

为什么80%的码农都做不了架构师&#xff1f;>>> 一&#xff1a;在看此篇代码示例前&#xff0c;先看静态代理&#xff0c; 链接地址&#xff1a;http://my.oschina.net/dyyweb/blog/656760 &#xff08;代码示例&#xff09; 二&#xff1a;JDK动态代理 动态…

C语言扫雷游戏简单实现

文章目录前言一、代码思路二、代码实现1.引入库2.具体代码见以下链接&#xff0c;免费下载&#xff0c;无需慌张3.运行结果前言 本篇文章为使用C语言的easyX库函数实现扫雷小游戏 一、代码思路 1.设置扫雷地图 用一个二维数组表示扫雷地图 初始化二维数组 埋雷&#xff0c;-1…

VS2010中C#添加图片(资源)

做工具栏的时候要用到图片。图标这样的东西从文件夹里导入显得有些山寨。VS的图形化操作很方便。但是我们的程序要动态载入图标。所以不能拖拽了~ 下面是添加图片的方法&#xff1a; 1》右击项目 》 属性 选择资源选项卡 如果没有资源的话&#xff0c;显示右上图。点击创建一个…

字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到

字符串左旋问题 问题描述 左旋字符串中的k个字符。例如 ABCD左旋一个字符得到BCDA &#xff0c;ABCD左旋两个字符得到CDAB 解法一&#xff1a;暴力破解法 先左旋一个字符 将字符串首个字符保存在temp中 字符串其余字符向左移动一个单位将temp中保存的字符放到字符串结尾 重复…