使用.NET 开发Office 2003解决方案

Office 应用程序之间相互通信——以及自动化它们之间的交互——的一般方法是使用内建的 VBA 语言。但是开发人员应该开始注意微软编程的未来走向Visual Studio .NET,它的丰富的工具集,它的面向对象的特性,以及它的无数的框架(所谓框架是指包含一些有用对象的代码库的集合,比如加密)。
  
  很多开发人员发现经常需要设计 Office 应用程序之间或 Office 应用程序与外部世界的通信方式。这里我将向你展示如何编写能实例化 Access 并使其显示报表的VB.NET 应用程序。使用这里展示的例子,你可以从 Office 套件的外部以及 VBA 的外部自动化 Office 应用程序。
  
  创建第一个针对 Office 2003 的 VB.NET 项目
  下面的例子假设你安装了Visual Studio 2003 和Office 2003(虽然可以使用以前的版本,但是我们没有在老版本中测试)。另外你还需要示例 Northwind 数据库,因为该应用程序中用到了这个数据库。
  
  启动 VB.NET,然后打开一个新的 Windows 样式的应用程序。从菜单中选择 File | New | Project(文件 | 新建 | 项目)。点击左边窗格中的 Visual Basic Projects(Visual Basic 项目),然后在模板窗格中双击 Windows Application(Windows 应用程序)。这个时候会出现 Form1,然后双击窗体进入 Form1 的代码窗口。
  
  现在你看到的是VB.NET 程序员用来编写初始化代码的Form_Load事件。在代码不是很多的情况下,就像我展示的这个例子,程序员通常会把所有的代码都放在这里。
  
  将列表A中的代码敲到 Form1_Load 事件中(你也可以使用拷贝/粘贴,但那还有什么乐趣呢?)。在你敲入这段代码时,你可能会看到在以下这些代码下有锯齿线(锯齿线表示有错误):
  
  access.Application
  
  access.ApplicationClass
  
  如果你将鼠标指针悬停在这些对象之上,你会看到一个小消息说这个类型没有定义(this type is not defined)。如果你是有经验的 VB 程序员,你可能会感到很吃惊,因为在这个上下文中使用了类型(type)这个词。不要被吓住了:这只是 VB.NET 不是由 VB 程序员编写带来的一个副作用。而且看上去很多有 VB 经验的人都参与了 VB.NET 文档的编制。所以要熟悉很多 C 语言变形,前面提到的就是一个。Type 在这里是 Object的意思。
  
  下载 Office 2003 程序集测试这个代码
  如果按下 F5 键尝试测试这段代码,你会得到同样的类型未定义的错误消息。这是因为你没有包含一个必要的“引用”(与使用 Imports 语句类型)引入 Access 对象库。
  
  你必须在 VB.NET 代码窗口中选择 Project | Add Reference(项目 | 添加引用),然后点击对话框中的 COM 选项卡。现在向下拉动滚动条,然后双击Microsoft Access 11.0 Object Library(11.0 表示 Office 2003)。点击 OK(确定)关闭对话框,这样就把这个与 Access 相关的代码库添加到了VB.NET 项目中了。
  
  如果在 COM 库列表中没有发现Microsoft Access 11.0 Object Library 该怎么办呢?这是处于分布式框架可爱世界的程序员遇到的另外一个困难。幸运的是,如果没有这个特定的对象库,你可以很容易地修正它。只要到 MSDN 下载它即可。
  
  为了使你的生活更加术语化,你正在下载的项叫做Office XP 主interop程序集(primary interop assembly)。程序集(assembly)是代码库(code library)的另外一个叫法,你可以叫它们 DLL 或者任何你想叫的名字。我发现代码库总共至少有25种叫法:程序集(assembly)、控件库(control library)、类库(class library)、控件类型库(control type library)、核心类型库(core type library)、开发环境(development environment)、动态链接库(dynamic link library)、可扩展库(extensibility)、宿主对象模型(host object model)、内核(kernel)、辅助库(helper)、对象库(object library)、对象模型(object model)、命名空间(namespace)、项目模型(project model)、代理库(proxylib)、插件(plug-in)、插件类型库(plugin type library)、运行时执行库(runtime execution library)、运行时执行引擎(runtime execution engine)、运行时库(runtime library)、服务(services)、服务库(services library)、类型库(type library)。不可否认,这些术语的内涵有些细微的差别。例如,控件的代码库中通常都会有一个用户界面。不过无论如何,多数这种术语只是说法不同而已。
  
  在下载完Office XP PIA (主interop程序集)之后,你是不是认为然后就可以直接使用它了?对不起,你还需要对它进行更多的处理。它有一个 readme.htm 文件描述了安装和运行它的步骤。而且,在安装完 PIA 之后一定要重启 Windows。此外,有时候不使用这个代码库也可以在 VB.NET 和 Office 2003 之间进行通信。然而,对于这篇文章中的例子,PIA 是必须的。
  
  运行 VB.NET 应用程序
  现在你应该可以运行前面的代码了,按下 F5 查看代码执行过程。Access 将会启动,然后显示 Northwind 示例数据库中的 Sales by Category 报表。如果出现了一个错误消息,说明 Access 不能打开这个数据库,那么就表示在你的硬盘上的下面这个路径中没有发现Northwind.mdb 数据库。
  
  "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb"
  
  要么在你的硬盘上定位这个示例数据库然后更改代码中的路径,要么使用Visual Studio 光盘安装它。这样这个例子——你的第一个 VB.NET Office 2003 应用程序——就可以运用了。
posted @ 2008-08-20 10:27  kin2321  阅读(395)  评论(0编辑  收藏  举报