听棠.NET

用积极乐观的心态,面对压力
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


使用 Microsoft Office 将 Visual Studio .NET 的强大功能引入业务解决方案的建立

发布日期: 10/26/2004 | 更新日期: 10/26/2004

下载本文的代码:MicrosoftOffice2003.exe (152KB)

摘要 Microsoft Office 系统的 Microsoft Visual Studio 工具是一项全新的技术,它可将 Visual Studio .NET 的高级功能和 .NET Framework 用于建立在 Microsoft Word 2003 和 Excel 2003 上的应用程序。现在您可以使用 Visual Basic .NET 和 C# 来编写以文档为中心的托管代码解决方案,该解决方案可与 Word 2003 或 Excel 2003 一起在进程内运行,并利用它们公开的充足的对象模型。通过该方法,您可以受益于托管环境,在该环境中执行完全编译的基于 .NET 的应用程序,其中包括代码访问安全性。

*

 

 

本页内容

优点 优点
快速入门 快速入门
调查基础结构 调查基础结构
完成演示 完成演示

Microsoft® Office 提供丰富的环境以创建业务应用程序。通过 Office 应用程序公开的基于 COM 的对象模型,您可以使用 Visual Basic® for Applications (VBA) 代码、进程外 COM 自动化以及 COM 加载项来创建针对 Office 的非托管应用程序。

您可以在 Office 应用程序本身内直接运行 VBA 代码。该代码在进程内运行,并且代码和编译位通常使用文档存储(除 Outlook® 外,所有 Office 应用程序都将代码存储在文档内)。记住宿主的 VBA 代码被编译为 p 代码,而不是本机代码,这会导致性能略微有所下降,尽管在进程内运行能够优化对 Office 对象的方法调用。

您还可以用 Visual Basic 编写应用程序,或以其他与 Office 应用程序提供的公开接口交互的 COM 识别的语言进行编写。通常,这些应用程序在进程外运行,要求通过 COM proxy/stub 层调用。自动化应用程序经常被编译为本机代码,因此执行速度比 VBA 代码快。但是,这个优势会因为对跨应用程序方法调用导致性能降低而有所抵消。

以 Office 2000 启动,Office 应用程序搜索实现 IDTExtensibility2 接口的注册加载项组件,并根据加载项的配置,在启动时或根据需要对其进行加载。使用 Visual Basic、其他 COM 识别的语言和 VBA,可以创建实现该接口的应用程序,即使是使用 Office Developer 产品和 VBA,也可以创建 COM 加载项。这样的灵活度可以提供良好的兼顾性,允许完全编译的应用程序在进程内运行。该项技术确实要求组件进行注册,以便 Office 应用程序能够识别加载项的存在。可创建将在多个 Office 应用程序内加载的单一 COM 外接应用程序,并且 COM 加载项本身提供跨文档的工具集,其固有行为在从一个文档到下一个文档时不会更改。

可能有时您会发现自己身处托管代码的世界中,并且想与安全的、垃圾回收世界中的 Office 进行交互。事实证明,由于 COM interop 的奇迹和公共语言运行库 (CLR) 的运行库可调用包装 (RCW),您仍然可以在 Office 应用程序内对方法进行进程外调用,并且稍加努力,就可使用托管代码创建 COM 加载项。但是,VBA 仍保持非托管状态,并有可能在可预知的未来仍然如此。

如果您意欲自己创建前端应用程序,那么编写使用自动化的基于 Framework 的代码来控制 Office 应用程序是个不错的方法,用户需要启动您的应用程序,该程序可能随后可见或不可见地加载 Word 或另一个应用程序。如果需要创建可在多台 Office 主机中运行并且是文档不可知的解决方案,则可使用托管代码创建一个 COM 加载项。

有可能这些模型中没有一个适合您的需要。或许您的用户习惯于加载 Word 文档并运行您的文档管理应用程序,或打开 Excel 电子表格并在工作薄内容上执行统计分析。或许您希望使用托管代码来响应 Office 应用程序事件。或许您希望能够使用 Visual Basic .NET 或 C# 代码来响应 Word 应用程序中出现的按钮或菜单单击。或许您想显示一个 Windows窗体,该窗体在Visual Studio .NET 中创建以响应对 Excel 电子表格输入的请求。为了满足这些要求,Microsoft 已经发布了适用于 Microsoft Office 的 Visual Studio 工具以及适用于 Visual Studio .NET 2003 的加载项,可用于创建以文档为中心的托管应用程序,该应用程序与 Word 2003 或 Excel 2003 一同在进程内运行。

优点

适用于 Office 的 Visual Studio 工具具有很多优点。可使用 Visual Studio .NET 的所有功能来创建基于 Office 的应用程序。可使用 Visual Basic .NET 或 C# 来创建自己的应用程序。两种语言均比 VBA 强大。可从 Office 应用程序内利用 .NET Framework 的所有功能,从 XML 读取器到 ADO.NET,再到 Web 服务。

还可利用内建在 CLR 中的代码访问安全性。不同于 VBA 宏,除非使用 Office 的 Visual Studio 工具的托管解决方案得到明确信任,否则它不会运行。Office 加载程序的 Visual Studio 工具使用的默认设置不允许任何程序集运行,以保护用户免受病毒或其他恶意代码的侵害。用户可以使用托管代码扩展加载文档前,管理员必须明确对某个程序集或位置赋予完全信任。Office 的 Visual Studio 工具允许利用非接触部署。用户可自动接收对应用程序的更新,无需用户干预。

快速入门

为了让您通过实践来学习,我们将从安装开始,然后使用会检索数据并将其制成图表的 Visual Basic .NET 或 C# 代码来创建一个简单的 Excel 应用程序。

安装 Office 的 Visual Studio 工具会向 Visual Studio .NET 2003 添加一组项目模板,使您能够使用 Visual Basic .NET 或 C# 代码来创建 Word 文档、模板项目或 Excel 工作表以响应事件并使产品自动化。一旦安装完 Visual Studio .NET 2003,就可以安装 Microsoft Office 2003 了,最后是用于 Microsoft Office 系统的 Visual Studio 工具,(按照上述顺序)就可以创建利用存储在全局程序集缓存 (GAC) 中的 Microsoft Office 2003 Primary Interop Assemblies (PIAs) 的应用程序了。您将能够从使用 Visual Basic .NET 或 C# 代码以在进程内将 Office 自动化的 Visual Studio .NET 内创建 Word 或 Excel 项目。(不,您没有遗漏任何东西,Office 的 Visual Studio 工具这次只允许从 Visual Studio .NET 内创建 Word 和 Excel 项目。随着时间的推移,您或许会看到对其他 Office 产品的扩展支持。)

若要从示例应用程序开始,您需要在 Visual Studio .NET 中创建一个 Excel 项目。首先,验证您已经安装了 Visual Studio .NET 2003、Office 2003 以及 Office 的 Visual Studio 工具。安装 Office 2003 时,必须执行完整安装或单独选择每个 Office 产品的 .NET 支持,以便将适当的 PIA 安装在 GAC 中。安装完整的 Office 产品非常简单,但也可以为 Word、Excel、Microsoft Forms 以及 Microsoft Graph 单独安装 PIA。

其次,在 Visual Studio .NET 中,使用 File | New | Project 菜单项来选择项目和模板类型。首先选择 Microsoft Office 2003 Projects。选择 Visual Basic Projects 或 C# Projects,然后选择 Excel Workbook 作为模板类型。输入项目名,完成后单击 OK。

最后,Microsoft Office Project Wizard 的第二个页面允许选择是使用现有的文档还是创建一个新文档。也可使用该页面上的 Security Settings 链接以不使用向导提供的默认值,来为项目设置必要的代码访问安全性。现在,选择 Create New Document 选项,为项目选择一个方便的位置。单击 Finish 以完成向导的步骤并创建新项目。(现在请勿更改默认的安全设置。直到您熟悉代码访问安全性以及 Office 的Visual Studio 工具使用的设置为止。此时更改安全性设置可能会使您的应用程序无法运行和调试。)

一旦创建了项目,您就会发现解决方案资源管理器窗口中包括了到适当 Office 应用程序的引用,以及包含名为 OfficeCodeBehind 的类的文件,该类能够让您挂钩文档事件的事件处理程序。
在代码文件(ThisDocument 或 ThisWorkbook,带有选定语言的适当文件扩展名)顶部,您会看到 Imports 或 using 语句,它简化了到主机对象模型内的对象的输入引用:

' Visual Basic .NET
Imports Excel = Microsoft.Office.Interop.Excel
// C#
using Excel = Microsoft.Office.Interop.Excel;

接下来,您会看见描述类的属性:

' Visual Basic .NET
' Office integration attribute. Identifies the startup class 
' for the document. Do not modify.
// C#
// Office integration attribute. Identifies the startup class
// for the document. Do not modify.
[assembly:System.ComponentModel.DescriptionAttribute(
  "OfficeStartupClass, Version=1.0,
  Class=ChartDemo.OfficeCodeBehind")]
' Visual Basic .NET
Imports Excel = Microsoft.Office.Interop.Excel
// C#
using Excel = Microsoft.Office.Interop.Excel;

接下来,您会看见描述类的属性:

' Visual Basic .NET
' Office integration attribute. Identifies the startup class 
' for the document. Do not modify.
// C#
// Office integration attribute. Identifies the startup class
// for the document. Do not modify.
[assembly:System.ComponentModel.DescriptionAttribute(
  "OfficeStartupClass, Version=1.0,
  Class=ChartDemo.OfficeCodeBehind")]
' Visual Basic .NET
Imports Excel = Microsoft.Office.Interop.Excel
// C#
using Excel = Microsoft.Office.Interop.Excel;

接下来,您会看见描述类的属性:

' Visual Basic .NET
' Office integration attribute. Identifies the startup class 
' for the document. Do not modify.
// C#
// Office integration attribute. Identifies the startup class
// for the document. Do not modify.
[assembly:System.ComponentModel.DescriptionAttribute(
  "OfficeStartupClass, Version=1.0,
  Class=ChartDemo.OfficeCodeBehind")]

尽管包含的注释指示不应修改该属性,但是在某些情况下,必须对其进行修改。例如,如果修改类名或命名空间,则需要手动更新该属性以进行匹配。Office 加载程序的 Visual Studio 工具使用该属性来确定其应当在用户打开宿主文档时加载的类的名称,本文稍后会有详细说明。

接下来,是与应用程序和主文档对象相对应的变量的声明(Excel 的为 ThisWorkbook 和 ThisApplication,Word 的为 ThisDocument 和 ThisApplication),如 1所示。此外,这些类包含基本事件的事件处理程序(Excel 中的 Workbook.Open 和 Workbook.BeforeClose,Word 中的 Document.Open 和 Document.Close),如 2所示。

还有,如果在类中扩展名为“生成的初始化代码”的区域,则还需进行几个过程,本文稍后将会进行讨论。现在,在类中向下滚动并找到 ThisWorkbook_Open 过程。添加代码,以便该过程看起来如 3中的示例。注意此处 Visual Basic 和 C# 代码之间的差别。例如,在 Visual Basic .NET 中,可以只需调用 Application.Range 属性,传递单一参数。Application.Range 属性已被定义为接受两个可选参数,但是 C# 对于参数化属性和可选参数均不支持。因此,在为 Excel 创建 PIA 时,团队添加了 get_Range 方法,即数种使 C# 开发人员可以使用 Excel 对象模型的访问器方法之一。相同的问题也适用于接受单一参数的 Range.Value 属性。在 C# 中,必须使用 Value2 属性,该属性不接受任何参数。在 Visual Basic 中,可以使用 Value2,但是这样做没有优势可言。

选择 Debug | Start 来运行该应用程序。Visual Studio .NET 编译并运行加载 Excel 的应用程序。如果仔细遵循这些步骤,则应当看见电子表格出现,其单元格 A1 中具有正确的格式化文本。欣赏完自己的作品后,关闭 Excel 并返回设计模式。

若要查看所做的操作,请保存项目,关闭 Visual Studio .NET,并使用 Windows 资源管理器来浏览包含项目和 Excel 工作薄文件的文件夹。双击 XLS 文件以加载 Excel,并验证适当的文本出现在工作表中。重新加载 Visual Studio .NET 和示例项目以继续演练。
就象看起来那么简单,您已经自己完成了某些难于把握的东西 — 您已经编写了托管代码,通过从 Visual Basic .NET 或 C# 代码内与 Excel 对象模型交互来响应 Excel 事件。

调查基础结构


创建项目时,指定希望与该项目关联的 Word 或 Excel 文档的位置。在 Visual Studio .NET 创建该项目时,它会设置与该项目关联的多种属性,包括 AssemblyLinkLocation 和 OfficeDocument 属性(请参阅 图 4)。AssemblyLinkLocation 属性指示 Office 文档希望找到需要用于运行代码的程序集文件的位置,OfficeDocument 属性指示 Visual Studio .NET 解决方案可找到关联的 Office 文档的位置。

OFFissues0309microsoftoffice2003toc4

4 项目属性


此外,创建项目会设置一些调试功能。从 Visual Studio .NET 内启动项目,加载 Excel 或 Word 以及 Office 文档,并在必要时运行代码。为了 Visual Studio 能够调试您的应用程序,它必须知道要加载什么应用程序。在创建项目时,Visual Studio .NET 检索适当的 Office 应用程序的位置,并存储该位置以及必要的命令行参数。如果查看图 5,您会看到项目属性页面,包括应用程序位置和命令行参数。

OFFissues0309microsoftoffice2003toc5

5 设置位置属性


一旦启动了调试会话(或只是从 Windows 资源管理器加载了 Office 文档),文档如何得知要加载哪个程序集以及运行什么代码?用户并不知道,Visual Studio .NET 已将两个自定义属性插入创建项目时指定的文档中。通过将文档载入 Excel,可选择 File | Properties 来显示对话框,如图 6 所示。.在自定义选项卡上,可以找到两个名为 _AssemblyName0 和 _AssemblyLocation0 的属性。这些属性包含关联程序集的路径和文件名。默认情况下,该程序集位于与项目同名的文件夹内,其后附加“_bin”。例如,如果项目名为 ChartDemo,则默认的程序集位置是 ChartDemo_bin 文件夹。

OFFissues0309microsoftoffice2003toc6

6 ChartDemo 对话框


很清楚,有一些代码会引起 Excel 或 Word 加载并运行在自定义文档属性中指定的程序集。在文档加载时,如果 Excel(或 Word)发现这些特殊的文档属性,则它会引发 Office 的 Visual Studio 工具的非托管加载程序 DLL,OTKLOADR.DLL,以加载并链接托管程序集。


一旦主 Office 应用程序加载了创建的程序集,它如何得知要运行什么代码?这就是之前所讨论的程序集属性所发挥的作用— 该属性说明包含 Visual Basic .NET 或 C# 代码的类的完全限定名。


一旦它加载了适当的程序集,OTKLOADR.DLL 就会将名为 _Startup 的类中的过程传递至 CLR 以进行执行。您不用创建这个过程 — 该项目模板创建它并将其放入“生成的初始化代码”区域。尽管可以修改该过程,但是或许不应对其进行修改。加载程序还向 _Startup 传递应用程序的引用(Word 或 Excel 应用程序对象)和文档自身的引用(Excel.Workbook 或 Word.Document 的实例)。_Startup 方法将该信息复制到局部变量并挂钩任何必要的事件处理,如图 7 所示。


该区域还包含名为 _Shutdown 的公共过程,该过程在应用程序关闭文档时自动被加载程序调用:

' Visual Basic .NET
' Required procedure. Do not modify.
Public Sub _Shutdown()
  ThisApplication = Nothing
  ThisWorkbook = Nothing
End Sub

// C#
// Required procedure. Do not modify.
public void _Shutdown()
{
  thisApplication = null;
  thisWorkbook = null;
}

由此,您的程序集使用标准的 COM 事件封送处理机制来响应由 Word 和 Excel 对象引起的事件。注意在 VBA 事件处理程序和托管事件处理程序之间没有定义的交互。如果现有的 Word 或 Excel 文档包括处理事件的 VBA 代码,添加处理相同事件的 Visual Basic .NET 或 C# 代码会使工作出色,但是不能确定事件处理程序的运行顺序。确保您的应用程序不依赖于特定的顺序。


当然,使用托管代码的主要的好处之一是对代码访问安全性的支持,并且在您的程序集中编写的代码可利用用户的安全策略。尽管 Visual Studio .NET 在创建项目时为您的程序集创建了适当的安全策略(授予全部权限),但是这并不是部署解决方案时的情况。在使用 Office 的 Visual Studio 工具分布解决方案时,您有多种选择。可将 Office 文档和程序集都部署到客户端计算机。可将 Office 文档部署到本地计算机,并在共享位置宿主程序集。甚至可将 Office 文档和程序集都部署到共享位置。


每个选项都有其优缺点,包括将文档和/或程序集宿主在共享位置时更新它们的能力。在任何情况下,在部署使用 Office 的 Visual Studio 工具创建的解决方案时,需要考虑到代码访问安全性的要求,以及为设置和测试不同的安全情况在部署计划中分配时间。


完成演示


按照这七个步骤从 SQL Server? 检索数据,并将其添加到工作表,然后将数据制成图表:

1.

运行项目。在 Excel 内,使用鼠标右键单击主菜单栏,并选择 Control Toolbox 工具栏。

2.

从该工具栏中选择并在工作表上绘制 CommandButton 控件,包括从单元格 A3 到 A4。

3.

在 Control Toolbox 上,选择 Properties 按钮。在 Properties 窗口,将 CommandButton 控件的 Name 属性设为 cmdChart,将其 Caption 属性设为 Create Chart。

4.

在 Control Toolbox 上,取消选择 Design Mode 工具,将控件置入运行模式。关闭 Control Toolbox 窗口。完成后,工作表应当如图 8 所示。

5.

关闭 Excel,将更改保存到您的工作薄。

6.

返回 Visual Studio .NET 中,滚动至当前文件的顶部,并添加适当的语句:

' Visual Basic .NET
Imports System.Data
Imports System.Data.SqlClient

// C#
using System.Data
using System.Data.SqlClient;

7.

在当前类的底部,添加如 9所示的过程。然后修改 connectionInfo 变量的值以反映 SQL Server 安装的位置和安全性设置。

OFFissues0309microsoftoffice2003toc8

8 CommandButton


除标准的 ADO.NET 代码外,RetrieveData 过程还清除单元格 A5 周围的所有单元格,然后依次访问由 SqlDataReader 对象返回的行,并将两列插入工作表中的单元格。再次注意此处 Visual Basic .NET 和 C# 代码的差异 — Offset 属性期望两个参数,因为 C# 不能处理参数化属性,所以 Excel PIA 提供 C# 开发人员必须使用的 get_Offset 方法。


下一个任务是为嵌入在工作比表上的 CommandButton 控件挂钩事件处理程序。该控件是 Microsoft 窗体软件包的一部分,该软件包是一组基于 COM 的控件,由多数 Office 产品使用。为了便于将事件处理程序挂钩至该软件包中的控件,Visual Studio .NET 项目模版包括 FindControl 方法的两个重载版本(一个版本只接受控件名称,另一个接受控件名称和文档引用,如果控件不在当前表中)。调用该方法来检索文档上对控件的引用。


尽管 Office 的 Visual Studio 工具的最终版本会为你考虑到以下细节,但是如果使用的是产品的公共 Beta 测试,则可能需要执行额外几个步骤以使用由 Microsoft 窗体软件包提供的控件。如果查看引用模块顶部的 Microsoft 窗体的 Imports/using 语句(指示您使用的是该产品的最新测试或最终版本),则向前跳过说明添加变量命名按钮的几个步骤。否则,向 Visual Studio .NET 解决方案资源管理器窗口中的 Microsoft 窗体 2.0 COM 库添加引用。(您可能会在清单中找到该库的两个引用。若如此,请选择第一个。)单击 Select,然后单击 OK 以关闭对话框。


滚至代码文件的顶部,并根据所选的语言(Visual Basic .NET 或 C#)添加以下语句:

' Visual Basic .NET
Imports MSForms = Microsoft.Vbe.Interop.Forms

// C#
using MSForms = Microsoft.Vbe.Interop.Forms;
在 ThisApplication 和 ThisWorkbook 变量的声明之后直接添加以下声明: 
' Visual Basic .NET
Private WithEvents button As MSForms.CommandButton

// C#
private MSForms.CommandButton button;

其次,向该类添加以下过程:

' Visual Basic .NET
Private Sub button_Click() Handles button.Click
  RetrieveData()
End Sub

// C#
private void button_Click() 
{
  RetrieveData();
}

将这个代码添加到该类的 ThisWorkbook_Open 过程:

' Visual Basic .NET
button = DirectCast(FindControl("cmdChart"), _
    MSForms.CommandButton)

// C#
button = (MSForms.CommandButton) FindControl("cmdChart");
button.Click +=new 
  MSForms.CommandButtonEvents_ClickEventHandler(button_Click);


保存并随后运行该项目。验证单击工作表上的按钮从 SQL Server 加载数据并将其显示在工作表上,如 10 所示。完成后,关闭 Excel。如果愿意,可保存该工作薄。

OFFissues0309microsoftoffice2003toc10

10 显示数据


返回 Visual Studio .NET 中,将 11 中的过程添加到该类,如果有图表存在,则此操作会将其删除。正如通过研究该代码所发现的,Excel(和 Word)中的许多方法都返回对象类型,意即您需要谨慎的将返回值强制转换为正确的类型。(通过不使用 Option Strict On 可以在 Visual Basic .NET 中避免这个麻烦,但是不推荐这样做。这样容易使创建的代码可以编译但是不能正确运行。)


其次,将 12 中的过程添加到该类,来创建图表。注意 C# 代码与相应的 Visual Basic .NET 代码的不同之处。正如先前所述,数种 Excel 方法接受 C# 不支持的可选参数。若要解决这个局限性,C# 代码必须为每个引用类型的可选参数传递 Type.Missing 字段。(对于值类型的可选参数,C# 代码必须传递实际的默认值。)在 DeleteExistingChart 方法中,WorkSheet.ChartObjects 方法可用于指定希望检索的图表索引或不指定任何参数以检索 ChartObjects 集合。在 C# 中,若要检索整个集合,必须为可选参数传递 Type.Missing。相同的准则也适用于在 CreateChart 方法中调用 Charts.Add 方法时。通常,对于任何要求可选引用类型参数的方法,C# 开发人员可传递 Type.Missing。


修改 CommandButton 控件的 Click 事件处理程序,向 CreateChart 过程添加一个调用:

' Visual Basic .NET
Private Sub button_Click() Handles button.Click
  RetrieveData()
  CreateChart()
End Sub

// C#
private void button_Click() 
{
  RetrieveData();
  CreateChart();
}


最后,保存并运行该项目,单击该按钮并验证您已设法加载了数据并创建图表。完成后退出 Excel,如果愿意,保存该工作薄。
如果仔细遵循了该过程,则应当已创建了如 13 所示的图表。通过该方法,可以知道如何利用数个 Excel 对象以及如何将事件挂钩到嵌入到文档中的控件。还能够了解在编码 Office 对象中涉及到的 Visual Basic .NET 和 C# 代码的不一些同之处。尽管本例没有利用 Office 中提供的菜单和工具栏,但是您可从托管代码中通过编程方式使用这些项。

OFFissues0309microsoftoffice2003toc13

13 条形图


当然,您还没有看到代码访问安全性是如何影响项目功能来运行的。在创建项目时,Visual Studio .NET 添加了一个允许程序集从其当前位置运行的代码访问策略。将它复制到硬盘上的任何其他位置会导致代码失败。若要验证代码访问安全性的表现,请转到 Visual Studio .NET 并将Assembly Link Location 属性更改为任意其他位置。现在重建应用程序并运行项目。您会发现该代码进行编译,并且 Visual Studio .NET 加载 Excel 以及工作薄,但是代码不会运行。 14 显示了您将收到的警告。重置 Assembly Link Location 属性并重复先前的步骤,以验证代码在文件夹名重置后再次运行。

OFFissues0309microsoftoffice2003toc14

14 警告消息


代码访问安全性确保您不能从任意位置运行程序集,只能从已被授予许可的位置运行。默认情况下,Visual Studio .NET 设置代码访问策略以允许您的代码从其开发位置运行。更改该位置,代码将不会运行。


有关部署和安全性选项的详细论述颇为复杂,可就此问题另写一篇完整的文章。现在,注意为了将您的应用程序部署到其他用户的计算机,需要定义安全策略,使之允许您的代码运行。使用 Office 的 Visual Studio 工具创建的程序集,其效果等同于从 Internet 或 intranet 上下载程序集 — 将程序集下载至用户的下载缓存并从那里运行。同样的安全性问题也都适用于两种类型的程序集。


使用 Office 的 Visual Studio 工具会要求了解 Office 对象模型,熟悉 .NET 安全性和部署问题以及业务需求。最后,开发人员将能够从 Office 应用程序中利用 CLR 和 .NET Framework 的所有强大功能。这些新的应用程序会顾及到用户,就好像他们只是运行 Word 或 Excel 一样。使用非接触部署会自动执行更新,没有管理员的许可,不受信任的代码不能运行。这只是 Visual Studio 工具为 Microsoft Office 系统提供的强大、安全、灵活的功能中的一部分。

相关文章,请参阅:


 

Ken Getz 是一位 MCW 技术的资深顾问。他与别人合著了 ASPNET Developer's Jumpstart (Addison-Wesley, 2002)、Access Developer's Handbook (Sybex, 2001) 以及VBA Developer's Handbook2nd Edition (Sybex, 2001)。他的联系方式为keng@mcwtech.com.

Brian A. Randell 是一位 MCW 技术的资深顾问和 DevelopMentor 的讲师。Brian 经常在世界范围内演讲有关 VSLive! 和 Tech Ed 的主题。并与别人合著了 Effective Visual Basic (Addison-Wesley, 2001)。