Office 加载项
Office 开发中使用的第二种模式是加载项模式. 本书涵盖了几种 Office 加载项. 其中包括 Outlook 的 VSTO 加载项, Excel 和 Word 的 COM 加载项以及 Excel 的自动化加载项:
用于 Outlook 的 VSTO 加载项这个新的 VSTO 功能使得为 Outlook 2003 创建加载项变得非常容易. 该模型是所有加载项模型中最体现 ".NET" 特色的, 并且与模型后面的 VSTO 代码非常相似文件. 第 24 章 "使用 VSTO 创建 Outlook 加载项" 详细描述了该模型.
Excel 和 Word 的 COM 加载项类库项目中的 C#类可以实现 IDTExtensibility2 接口, 并在注册表中注册为 COM 对象和 COM 加载项. 通过 COM 互操作, Office 创建 C#类并与之通信. 第 23 章 "开发 Word 和 Excel 的 COM 加载项" 介绍了 COM 加载项的创建以及使 COM 加载项开发成为问题的一些问题.
Excel 的自动化加载项这些托管类会公开 Excel 可以在公式中使用的公共函数. C#类必须在注册表中注册为 COM 对象. 通过 COM 互操作, Excel 可以创建自动化加载项, 并在公式中使用其公共方法. 自动化插件及其在 Excel 公式中的使用在第 3 章 "编程 Excel" 中讨论.
本书不讨论一些 Office 加载项技术. 智能文档加载项不被讨论, 因为 VSTO 提供了一种更简单的访问智能文档功能的方式, 尽管在文档或模板级而不是在应用程序级别. 有关 VSTO 对智能文档支持的更多信息, 请参见第 15 章 "使用操作窗格".
在 VSTO 中创建 Outlook 加载项
要在 VSTO 中创建 Outlook 加载项目, 请从 Visual Studio 的 "文件" 菜单的 "新建" 菜单中选择 "项目". 从项目类型列表中选择 Visual C#节点, 然后选择 Visual C#节点下的 Office 节点. Outlook 加载项目将显示在模板列表中. 键入新的 Outlook 加载项目的名称, 并选择项目的位置. 然后单击确定按钮.
VSTO 创建一个项目, 其中引用了 Outlook 2003 PIA, 核心 Office PIA 和其他需要的引用, 如图 2-6 所示. VSTO 还将项目项目添加到名为 ThisApplication.cs 的项目中. 此项目项目包含一个 C#类, 您将在实现 Outlook 加载项时添加该类.
如果双击 ThisApplication.cs 项目项, 您将看到如清单 2-4 所示的代码. 有一个简单的启动和关闭事件处理程序, 您可以在其中编写在加载项的启动和关闭时执行的代码. ThisApplication 类派生于 Outlook Application 对象的聚合. 这允许您通过在 ThisApplication 类中编写如 this.Inspectors.Count 等代码来访问 Outlook Application 对象的属性和方法.
清单 2-4 Outlook 加载项目中的此应用程序类中的初始代码
- using System;
- using System.Windows.Forms;
- using Microsoft.VisualStudio.Tools.Applications.Runtime;
- using Outlook = Microsoft.Office.Interop.Outlook;
- namespace OutlookAddin1
- {
- public partial class ThisApplication
- {
- private void ThisApplication_Startup(object sender, EventArgs e)
- {
- }
- private void ThisApplication_Shutdown(object sender, EventArgs e)
- {
- }
- #region VSTO Designer generated code
- private void InternalStartup()
- {
- this.Startup += new System.
- EventHandler(ThisApplication_Startup);
- this.Shutdown += new System.
- EventHandler(ThisApplication_Shutdown);
- }
- #endregion
- }
- }
看看清单 2-4 你可能会想到在类定义中使用 partial
VSTO 使用部分类, 这是. NET 的一个新功能, 可以让您在一个文件中定义一部分类, 另一部分将另一部分定义为一个类. VSTO 使用此功能来隐藏与 ThisApplication 类相关联的一些其他生成的代码, 以减少编写代码的类的复杂性. 最后的 ThisApplication 类将从清单 2-4 中的部分类中编译, 并在 VSTO 生成的部分类中隐藏的附加代码.
InternalStartup 方法由 VSTO 生成, 用于连接 VSTO 生成的任何事件处理程序. 这是启动和关闭事件处理程序挂钩的地方. 你不应该编辑这段代码. 我们可能会在本书的某些列表中省略此代码块, 但代码块必须在等级中, 类将无法编译.
我们将添加到清单 2-4 中的代码, 以创建一个加载项, 它将解决一个烦人的问题, 他们无意中回复了发送到包含大量人员的邮件别名的电子邮件. 除非您的头衔中有 "副总裁", 否则您可能不想在任何时候发送电子邮件至 25 位以上的人士. 我们将创建一个附加组件, 如果您这样做, 将会提醒您, 并提供 "这是潜在的职业限制措施. 您确定要将此电子邮件发送给 2.5 万人吗?" 信息.
Outlook 的 Application 对象有一个 ItemSend 事件, 每当用户发送一个电子邮件时都会产生. 我们将为 ThisApplication 类的 Startup 方法添加附加代码, 以连接 ItemSend 事件的事件处理程序, 如清单 2-5 所示. 因为 ThisApplication 类源自 Outlook 的 Application 对象的聚合, 所以我们可以编写 this.ItemSend 代码, 因为 ItemSend 是由 ThisApplication 基类引发的一个事件. ItemSend 事件处理程序接受一个名为 item 的对象参数, 它是要发送的 Outlook 项. 因为项目可以是诸如会议请求或电子邮件消息的许多事物中的任何一个, 所以项目作为对象而不是特定类型被传递. ItemSend 事件处理程序还具有通过引用传递的 bool 参数, 该引用称为 cancel, 可以设置为 true 以防止发送 Outlook 项目.
在我们的 ItemSend 事件处理程序中, 我们需要检查是否作为对象传递的 item 参数实际上是一个电子邮件. 实现此目的的最简单方法是使用 as 关键字来尝试将 item 参数转换为 Outlook.MailItem. 如果转换成功, 则结果值将为非空值, 我们将知道正在发送的项目是 Outlook.MailItem, 因此是电子邮件. 然后, 我们可以遍历 MailItem 对象上的收件人集合, 并检查是否发送到包含超过 25 个人的任何收件人列表. 收件人集合中的每个收件人对象都具有返回 AddressEntry 对象的 AddressEntry 属性. AddressEntry 对象具有一个 Members 属性, 返回一个可以检查计数的集合. 如果我们发现计数超过 25, 我们将显示一个对话框, 并询问用户是否真的要发送邮件. 如果用户单击 "否" 按钮, 我们将将 ItemSend 事件的 cancel 参数设置为 true, 以取消发送职业限制电子邮件.
清单 2-5 一个处理 ItemSend 事件并检查超过 25 个收件人的 VSTO Outlook 加载项
- using System;
- using System.Windows.Forms;
- using Microsoft.VisualStudio.Tools.Applications.Runtime;
- using Outlook = Microsoft.Office.Interop.Outlook;
- namespace OutlookAddin1
- {
- public partial class ThisApplication
- {
- private void ThisApplication_Startup(object sender, EventArgs e)
- {
- this.ItemSend += new
- Outlook.ApplicationEvents_11_ItemSendEventHandler(
- ThisApplication_ItemSend);
- }
- void ThisApplication_ItemSend(object item, ref bool cancel)
- {
- Outlook.MailItem myItem = item as Outlook.MailItem;
- if (myItem != null)
- {
- foreach (Outlook.Recipient recip in myItem.Recipients)
- {
- if (recip.AddressEntry.Members.Count> 25)
- {
- // Ask the user if she really wants to send this e-mail
- string message = "Send mail to {0} with {1} people?";
- string caption = "More than 25 recipients";
- MessageBoxButtons buttons = MessageBoxButtons.YesNo;
- DialogResult result;
- result = MessageBox.Show(String.Format(message,
- recip.AddressEntry.Name,
- recip.AddressEntry.Members.Count),
- caption, buttons);
- if (result == DialogResult.No)
- {
- cancel = true;
- break;
- }
- }
- }
- }
- }
- private void ThisApplication_Shutdown(object sender, EventArgs e)
- {
- }
- #region VSTO Designer generated code
- private void InternalStartup()
- {
- this.Startup += new System.
- EventHandler(ThisApplication_Startup);
- this.Shutdown += new System.
- EventHandler(ThisApplication_Shutdown);
- }
- #endregion
- }
- }
当您使用代码清单 2-4 所示的代码运行项目时, Outlook 将启动加载项加载. 尝试发送一个包含超过 25 个人的别名的邮件, 您可能希望首先离线, 以防您错误地输入代码. 如果所有功能正确, 加载项将显示一个对话框, 警告您向 25 位以上的人发送电子邮件, 您将可以取消发送电子邮件. 退出 Outlook 以结束调试会话.
第 24 章 "使用 VSTO 创建 Outlook 加载项" 更详细地讨论了 VSTO Outlook 加载项. 第 9 至 11 章 "编程 Outlook","使用 Outlook 事件" 和 "使用 Outlook 对象" 分别讨论了 Outlook 对象模型.
来源: http://www.bubuko.com/infodetail-3158772.html