日期:2011-05-05  浏览次数:20562 次

摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性。本文介绍了如何准备 Office XP COM 对象以及如何在 C# 程序中使用这些对象,同时还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现。

  简介

  Microsoft(r) Office XP 最强大的功能之一,就是其组件(例如 Microsoft Excel 2002 和 Microsoft Word 2002)以组件对象模型 (COM) 接口的形式公开其功能。通过 Microsoft Visual Basic(r) 6.0 访问这些 COM 接口要相对容易些,但要通过 C 或 C++ 来使用这些接口和公共类,则会比较困难。然而,拥有托管扩展的 Microsoft .NET 和 Microsoft C#? 或 Microsoft Visual C++(r) 却能够象 Visual Basic 6.0 一样,轻松地使用 Office XP 公开的 COM 对象。

  本文假定您要进行 Office XP 编程。尽管本文通篇提供了 MSDN(r) 文档的超链接,但要掌握本文介绍的内容,您应该已经熟悉或者能够访问 Office XP 编程文档。

  该文档介绍了 Office XP 提供的接口和公共类及其使用方法。文档内容以 Visual Basic 编程语言形式表达,因此您需要在头脑中对其中的方法和事件签名进行转换。本文将介绍如何进行这种转换,如何准备 Office XP 的 COM 对象,以及如何在 C# 程序中使用这些 COM 对象。最后,本文还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现。通过此信息,您就应能够利用其他使用 C# 的 COM 服务器。

  系统要求
  要运行示例,计算机上需要安装以下软件:

Microsoft Windows(r) XP 或 Microsoft Windows 2000 及相关的 Service Pack (SP)
Microsoft Office XP 及相关的 SP
Microsoft .NET Framework(英文)及相关的 SP
Microsoft Office XP Primary Interop Assemblies (PIA)(英文)
Microsoft Visual Studio(r) .NET
   .NET 的一些快速入门知识
  .NET 技术引入了程序集的概念,并将其作为基本的可执行单元。程序集可以是可执行文件 (.exe) 或动态链接库 (.dll),并可以包含多个文件。程序集包含有关运行程序所需的代码、类型和资源的全部信息。

  要使用 Office XP 公开的 COM 对象,需要使用主互操作程序集 (PIA),这样 C# 编译器就能够找到 Office XP 公开的接口和公共类。

  有关互操作程序集或 PIA 方面的内容,本文将不做详细介绍。

  了解一下已公开的类型信息通常会给您一些启示。Microsoft Visual Studio(r) .NET 提供了一个称作 ILDASM 的工具,用于列出封装在程序集中的类型信息。图 1 是 ILDASM 显示 Word 2002 主互操作性程序集信息的部分屏幕快照。

注意:要打开 ILDASM 工具,请单击“开始”,指向“程序”,指向“Microsoft Visual Studio .NET”,然后指向 Visual Studio .NET Tools(Visual Studio .NET 工具)并单击 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)。在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)窗口中,键入 ildasm。ILDASM 窗口随后打开。要查看某一特定互操作程序集或 PIA 的类型信息,在 File(文件)菜单中,单击 Open(打开)。浏览到互操作程序集或 PIA 的所在位置,选择要查看的互操作程序集或 PIA 并单击 Open(打开)。

图 1:使用 ILDASM 工具查看互操作程序集的类型信息

  如图 1 所示,程序集位于 Microsoft.Office.Interop.Word.dll 中,而接口和公共类则封装在 Microsoft.Office.Interop.Word 命名空间中。Application 公共类已经展开,这样就可以看到,它扩展(按照 C++ 和 C# 用语,为派生)了 Application,并且在 Word 中实现了 ApplicationEvents2_Event 接口。所有这些内容都将在本文后续部分进行详细讨论。

 使用 Office XP 主互操作程序集

  在运行本文包含的示例之前,应该在计算机上安装 Microsoft Office XP Primary Interop Assemblies (PIAs)(英文)。安装完 PIA 后必须将其置于编译器和已完成程序可以访问的位置。有关详细信息,请参阅 Office XP PIA 下载文档中包含的自述文件和“.NET Framework Developer's Guide”(要阅读它,请单击“开始”,指向“程序”,然后指向 Microsoft .NET Framework SDK 并单击 Documentation [文档])中的“Assembly Location”一文。

  本文出于演示目的,将 Office XP PIA 解压缩到以下文件夹:C:\Office XP PIAs\。然后将其安装到全局程序集缓存 (GAC) 并进行注册。

  可通过在命令行键入 C# 编译器的可执行文件名称 (csc.exe) 来调用此编译器。安装并注册 PIA 后,便可使用 /r 选项,象引用其他任何程序集一样在 csc 命令行上对其进行引用。如果 PIA 的位置无法访问,程序将在运行时失败,并生成一个 System.IO.FileNotFoundExceptionSystem.TypeInitializationException 类型的异常,告知哪个程序集无法加载。

  接下来在“如何编译和运行 example1.cs”一节中,将会介绍如何使用命令行生成 C# 程序和引用 PIA。

  本文包含的示例使用三个 Office XP PIA:

  • Microsoft.Office.Interop.Word.dll
  • Office.dll
  • Microsoft.Office.Interop.Excel.dll

  代码演练

  演示代码示例之前,首先应下载 odc_offcs.exe 文件并将示例程序解压缩到 C:\CSOfficeSamples 或您选择的目录中。为便于引用,在下面的所有示例中,都假定示例程序位于 C:\CSOfficeSamples 目录中。

  下载文档包含五个 Word 2002 示例程序(example1.cs、example2.cs、example3.cs、example4.cs 和 example5.cs)和一个 Excel 2002 示例程序 (excel1.cs)。示例源文件的相应示例生成文件(example1.exe、example2.exe 等)也一并包含在其中,供读者使用。

  所有代码示例都作了详细注释。

  示例 1:启动 Word Application 对象

  第一个示例非常简单,只显示如何启动 Word 2002,并使其在几秒内保持打开状态,然后再将其关闭。首先看一看 example1.cs 源文件中的主要代码行。下面的代码片段分配 Application 对象和它的基类对象,但实际上是进行 CoCreateInstance 调用。

  Application app = new Application();