扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:Microsoft 2007年11月14日
关键字:
在运行本文包含的示例之前,应该在计算机上安装 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.FileNotFoundException 或 System.TypeInitializationException 类型的异常,告知哪个程序集无法加载。
接下来在“如何编译和运行 example1.cs”一节中,将会介绍如何使用命令行生成 C# 程序和引用 PIA。
本文包含的示例使用三个 Office XP PIA:
演示代码示例之前,首先应下载 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();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 命令提示)窗口中生成该示例:
注意:命令行 csc 对 example1.c s 源文件进行编译,生成 example1.exe 可执行文件。在本示例中,所创建的可执行文件将自动保存在 example1.cs 所在的同一文件夹中。
命令行选项 /r 将引用 Microsoft.Office.Interop.Word.dll。如果 Microsoft.Office.Interop.Word.dll PIA(或引用的任何 PIA)所在位置的路径出现错误,程序将在运行时失败,并生成一个 System.IO.FileNotFoundException 或 System.TypeInitializationException 类型的异常,告知哪个组件无法加载。
图 2:使用命令行生成源文件
该示例是一个非常简单的程序,并不具备任何让人感兴趣的功能,现在让我们看一看示例 2。
示例 2:创建新 Word 文档example2.cs 与示例 1 一样,也是使用 Application 对象启动 Word 2002,然后在打开文档的集合(该集合封装在 Application.Documents 属性中)中添加一个新文档。第一个有意义的代码片断在创建新文档时出现的:
<FONT class=90v>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);</FONT> |
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 将 Boolean 值 true 封装成 object,并将其传递给 Documents.Add()
函数。
下一行重要代码是:
doc.Words.First.InsertBefore 使用从 app.Documents.Add()
函数调用返回的文档接口,在文档开始处添加了一些文本。此处没有特别之处。
下面再来看下一段比较让人感兴趣的代码片断,其作用是保存文档:
<FONT class=90v>object fileName = Environment.CurrentDirectory+"\\example2_new"; #if OFFICEXP doc.SaveAs2000( ref fileName, #else doc.SaveAs ( ref fileName, #endif ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional);</FONT> |
首先要注意的一件事就是,保存文件名称的字符串被封装到 fileName 对象中。其次,此代码将在定义了 OFFICEXP 的情况下调用 SaveAs2000 方法,而在未定义 OFFICEXP 的情况下调用 SaveAs 方法。或许您已经猜到,SaveAs 方法签名在 Office 2000 和 Office XP 之间存在差别。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者