使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(一)

excel|visual|word|编程

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程
Kerry Loynd 和 Siew-Moi Khor
Microsoft Corporation
2002年10月
适用于:
    Microsoft Office XP
    Microsoft Visual C#
摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性。本文介绍了如何准备 Office XP COM 对象以及如何在 C# 程序中使用这些对象,同时还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现。
在 MSDN Downloads(英文)下载或浏览 odc_offcs.exe。

目录

  • 简介
  • 系统要求
  • .NET 的一些快速入门知识
  • 使用 Office XP 主互操作程序集
  • 代码演练
    • 示例 1:启动 Word Application 对象
    • 示例 2:创建新 Word 文档
    • 示例 3:打开现有的 Word 文档
    • 示例 4:使用 Word 公开的事件
    • 示例 5:动画显示 Office 助手
    • 示例 6:默认属性和索引属性
  • 小结

简介
Microsoft Office XP 最强大的功能之一,就是其组件(例如 Microsoft Excel 2002 和 Microsoft Word 2002)以组件对象模型 (COM) 接口的形式公开其功能。通过 Microsoft Visual Basic 6.0 访问这些 COM 接口要相对容易些,但要通过 C 或 C++ 来使用这些接口和公共类,则会比较困难。然而,拥有托管扩展的 Microsoft .NET 和 Microsoft C# 或 Microsoft Visual C++ 却能够象 Visual Basic 6.0 一样,轻松地使用 Office XP 公开的 COM 对象。
本文假定您要进行 Office XP 编程。尽管本文通篇提供了 MSDN 文档的超链接,但要掌握本文介绍的内容,您应该已经熟悉或者能够访问 Office XP 编程文档。
该文档介绍了 Office XP 提供的接口和公共类及其使用方法。文档内容以 Visual Basic 编程语言形式表达,因此您需要在头脑中对其中的方法和事件签名进行转换。本文将介绍如何进行这种转换,如何准备 Office XP 的 COM 对象,以及如何在 C# 程序中使用这些 COM 对象。最后,本文还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现。通过此信息,您就应能够利用其他使用 C# 的 COM 服务器。系统要求
要运行示例,计算机上需要安装以下软件:

  • Microsoft Windows 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 .NET

.NET 的一些快速入门知识
.NET 技术引入了程序集的概念,并将其作为基本的可执行单元。程序集可以是可执行文件 (.exe) 或动态链接库 (.dll),并可以包含多个文件。程序集包含有关运行程序所需的代码、类型和资源的全部信息。
要使用 Office XP 公开的 COM 对象,需要使用主互操作程序集 (PIA),这样 C# 编译器就能够找到 Office XP 公开的接口和公共类。
有关互操作程序集或 PIA 方面的内容,本文将不做详细介绍。有关 PIA 的详细信息,请参阅 Primary Interop Assemblies (PIA)(英文)。本文的使用 Office XP 主互操作程序集一节提供了 Office XP PIA 的下载地址。
了解一下已公开的类型信息通常会给您一些启示。Microsoft Visual Studio .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) 并进行注册(有关该操作的详细信息,请参阅 Microsoft Office XP Primary Interop Assemblies (PIA) [英文] 的自述文件)。
可通过在命令行键入 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();

Application 类的 Quit 方法接受三个参数:saveChanges、originalFormat 和 routeDocument。这些可选参数可在 Visual Basic 代码中省略,而 C# 中则没有可选参数;所有这三个参数都必须在调用时传递给 Quit。在 C# 中可通过将值 Missing.Value 赋给每个可选变量(用于通知 Quit 方法使用默认行为)可获得同样效果。在本示例中,即表示“不保存文档,保留文档的初始格式,并且不进行路由选择”。

object saveChanges = Missing.Value;object originalFormat = Missing.Value;object routeDocument = Missing.Value;app.Quit(ref saveChanges, ref originalFormat, ref routeDocument);

请注意,所有这三个参数都标有 ref 关键字。由于这些方法最初是用 Visual Basic 编写的,而默认情况下 Visual Basic 按引用来传递参数。因此,此处也必须按引用来传递参数。

如何生成和运行 example1.cs

要运行该示例,首先要生成 examle1.cs 示例。要在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)窗口中生成该示例:

  1. 转到 C:\CSOfficeSamples 目录或保存该示例的任何目录。如图 2 所示,在命令提示后键入 cd C:\CSOfficeSamples 即可。
  2. 然后,在图 2 所示的命令提示后键入 csc /r:"C:\Office XP PIAs\Microsoft.Office.Interop.Word.dll" example1.cs 生成 example1.cs。
    (如果 Office XP PIA 保存在其他位置,则需要使用相应值替换下面的“驱动器”和“安装路径”:csc /r:驱动器:\<安装路径>\Microsoft.Office.Interop.Word.dll example1.cs。)
    注意:命令行 csc 对 example1.c s 源文件进行编译,生成 example1.exe 可执行文件。在本示例中,所创建的可执行文件将自动保存在 example1.cs 所在的同一文件夹中。
    命令行选项 /r 将引用 Microsoft.Office.Interop.Word.dll。如果 Microsoft.Office.Interop.Word.dll PIA(或引用的任何 PIA)所在位置的路径出现错误,程序将在运行时失败,并生成一个 System.IO.FileNotFoundExceptionSystem.TypeInitializationException 类型的异常,告知哪个组件无法加载。


    图 2:使用命令行生成源文件

  3. 要运行 example1.exe(与 example1.cs 源文件位于同一文件夹中),双击该程序即可。

该示例是一个非常简单的程序,并不具备任何让人感兴趣的功能,现在让我们看一看示例 2。

示例 2:创建新 Word 文档

example2.cs 与示例 1 一样,也是使用 Application 对象启动 Word 2002,然后在打开文档的集合(该集合封装在 Application.Documents 属性中)中添加一个新文档。第一个有意义的代码片断在创建新文档时出现的:

object template=Missing.Value;object newTemplate=Missing.Value;object documentType=Missing.Value;object visible=true;    _Document doc = app.Documents.Add( ref template,                       ref newTemplate,                       ref documentType,                       ref visible);

Add 方法的所有参数都是可选的,因此必须给这些参数指定一个有意义的值或是指定 Missing.Value。在该示例中,由于我们不需要使用或创建模板,并且这只是一个纯文本文档,因此将前三个参数(template、newTemplate 和 documentType)设置为 Missing.Value。由于希望此文档在本示例中可见,因此将参数 visible 设置为“true”。
您可能会对如何确定是否应将 Boolean 值赋给 visible 对象感到不解。这就是为什么访问 Word 2002 编程文档很重要的原因所在了。如果看一看 Word 2002 对象模型文档中有关 Documents.Add 方法的说明,您会看到以下内容:
Visible 可选的 Variant。设置为 True 将在可见窗口中打开文档。如果该值为 False,Microsoft Word 将打开文档,但将文档窗口的 Visible 属性设置为 False。默认值为 True

注意:要查看 Word 2002 Visual Basic 文档中的 Documents.Add 方法,可以在 Word 2002 的“工具”菜单中,选择“宏”,然后单击“Visual Basic 编辑器”。处于“Visual Basic 编辑器”的键盘状态下时,按 F2 键激活“对象浏览器”或按 F1 键查看“帮助”。然后搜索“Documents”或“Documents.Add”。在 MSDN 上也可以找到类似文档。

这样做回避了一个问题:为什么 PIA 期望 Add 方法的参数类型为 object,而 Documents.Add 方法文档却显示类型 Variant?这是因为 Variant 类型被自动封送处理为 .NET Object 对象类型,后者映射为 C# 的 object 类型。在本示例中,参数 visible 将 Booleantrue 封装成 object,并将其传递给 Documents.Add() 函数。
下一行重要代码是:

doc.Words.First.InsertBefore

使用从 app.Documents.Add() 函数调用返回的文档接口,在文档开始处添加了一些文本。此处没有特别之处。
下面再来看下一段比较让人感兴趣的代码片断,其作用是保存文档:

object fileName = Environment.CurrentDirectory+"\\example2_new";#if OFFICEXPdoc.SaveAs2000( ref fileName,#elsedoc.SaveAs ( ref fileName,#endif       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional);

首先要注意的一件事就是,保存文件名称的字符串被封装到 fileName 对象中。其次,此代码将在定义了 OFFICEXP 的情况下调用 SaveAs2000 方法,而在未定义 OFFICEXP 的情况下调用 SaveAs 方法。或许您已经猜到,SaveAs 方法签名在 Office 2000 和 Office XP 之间存在差别。

如何生成和运行 example2.cs

要生成 xample2.cs,可以在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)窗口中执行以下操作:

  1. 在 C:\CSOfficeSamples 目录或任何保存 example2.cs 的目录中,在如图 3 所示的命令提示后键入 csc /r:"C:\Office XP PIAs\Microsoft.Office.Interop.Word.dll" /d:OFFICEXP example2.cs
    (如果 Office XP PIA 保存在其他位置,则需要使用相应值替换下面的“驱动器”和“安装路径”:csc /r:驱动器:\<安装路径>\Microsoft.Office.Interop.Word.dll /d:OFFICEXP example2.cs。)

    图 3:使用命令行编译 example2.cs(单击图片查看大图像)
  2. 要运行 example2.exe(与 example2.cs 源文件位于同一文件夹中),双击该程序即可。

示例 3:打开现有的 Word 文档

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索office
, 程序
, c#保存word中图片
, interop office互操作
, microsoft
, c# 调用 exe 传递
, c#操作word
, 示例程序运行问题
, net互操作c++interop
, c#interop word
, app接口c#
, 参数vstoc#office
, 示例
Example
microsoft visual c、microsoft visual c库、microsoft visual c 6、microsoftvisual c、visual c 使用教程,以便于您获取更多的相关知识。

时间: 2024-10-31 03:54:49

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(一)的相关文章

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(二)

excel|visual|word|编程 示例 3:打开现有的 Word 文档 同 Documents.SaveAs 方法一样,Documents.Open 方法签名在 Office 2000 和 OfficeXP 之间也存在差别,因此新名称包装在 #if 声明中.Open 方法和 SaveAs 方法一样简单,如下所示:     object fileName = Environment.CurrentDirectory+"\\example3";    object optional

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Ex

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程 Kerry Loynd 和 Siew-Moi KhorMicrosoft Corporation 2002年10月 适用于:    Microsoft Office XP    Microsoft Visual C#摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性.本文介绍了如何准备 Office XP COM 对象以及如何在 C#

使用C#进行Word 2002和Excel 2002编程

excel|word|编程 摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性.本文介绍了如何准备 Office XP COM 对象以及如何在 C# 程序中使用这些对象,同时还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现. 简介 Microsoft(r) Office XP 最强大的功能之一,就是其组件(例如 Microsoft Excel 2002 和 Microsoft Word 2002)以组件对象模型 (COM) 接口的形式公开其

使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据

excel|visual|xml|数据 从数据集生成在 Excel 2002 或 Excel 2003 中使用的 XML本节说明如何创建 DataSet 对象,以及如何使用 WriteXML 方法将该对象包含的数据导出到 XML 文件中.生成的 XML 文件可以直接在 Excel 中打开.为便于说明,使用 Jet OLEDB 提供程序从 Microsoft Access Northwind 示例数据库创建了 DataSet 对象.但是,类似的代码可与您使用 Visual C# .NET 创建的任

Microsoft Visual J#.NET (JSharp) Version 7.0 Beta 1 out

js|visual Thanks Charles and Activewin for this news. Microsoft has posted it's Beta 1 version of Microsoft J#.Net Version 7.0 Beta 1 for download, it hasn't been posted on Download Center yet and the file is dated October 11, so it is unclear if thi

使用Microsoft Visual Studio 2010开发云应用程序

引言 云计算是一个可以让你在云中(也就是在远程服务器中)开发和部署应用程序的基础结构.使用云计算的主要优点是:可以降低成本,可以获得良好的可扩展性,可以增加灵活性和提高效率.微软的Windows Azure平台是一个云操作系统,它包含一系列云技术,其中的每种技术都负责提供一组特定的服务.本文首先会对云计算以及它的优点做一个概述,然后会和你一起探讨如何使用Microsoft Visual Studio 2010开发云应用程序. 前提条件 要使用本文中的代码样例,你应该在你的系统中安装如下工具: *

為 Microsoft Visual Studio .NET 設計工具建立可設計式元件(转贴)上

visual 為 Microsoft Visual Studio .NET 設計工具建立可設計式元件 Shawn BurkeMicrosoft Corporation 2000 年 7 月 摘要:Microsoft .NET 元件於通用語言執行階段,以管理程式碼撰寫建立而成.本文中討論 Microsoft .NET 元件如何提供開發人員一套全新的絕佳混合開發工具,不但類似於 Microsoft Visual Basic,同時提供與 ATL 或 MFC 更具關聯性的低階程式設計能力 (列印頁數共

Microsoft Visual Studio.NET及Borland Delphi6初探

visual Microsoft Visual Studio.NET及Borland Delphi6初探 最近安装上了Visual Studio.NET和Borland Delphi6这两个号称下一代编程环境的东东,感觉新东西实在不少,下面就说说我的感觉. 首先说Visual Studio.NET的安装.Microsoft在这方面的霸气一直不改,我还记得当初装Visual C++5.0的时候,本来我已经有了中文版的IE3.0,可是他一定要我先装一个英文版的IE3.01,否则就不允许继续,真是不给

Microsoft Visual Studio .NET 2003制作安装程序

visual|程序 做B/S项目已经很久了,总是羡慕应用软件漂亮的安装程序,也见到有一些使用InstallShield来做B/S系统安装程序,听说设置有点繁复,一直没有去研究它.最近新做了一个ASP.NET的查询项目,需要做一个安装程序,恰好发现Microsoft Visual Studio.net 2003可以完全胜任,那我又怎么会舍近求远呢!呵呵,闲话少说,来看看我如何制作吧! 首先,运行Microsoft Visual Studio .NET 2003,点"文件"→"新