zoukankan      html  css  js  c++  java
  • INFO:使用 Visual Studio .NET 开发 Microsoft Office 解决方案

    使用 Visual Studio .NET 进行 Office 开发

    您可以通过多种方法来在您的开发解决方案中以编程方式扩展、自动化、集成或使用 Office。如果您对使用 Office 开发解决方案较陌生,请访问本文“摘要”一节提供的 MSDN Web 站点,该站点介绍了许多不同形式的 Office 开发,并针对各个主题列出了一些文章。

    确定了将要进行的 Office 开发的类型之后,下一步就是确定使用什么样的开发工具。本文旨在讨论如何在 Visual Studio .NET 中生成 Office 解决方案。本文的内容既包括非托管语言(如 Microsoft 基础类 (MFC) 和活动模板库 (ATL)),又包括托管语言(如 Visual Basic .NET 和 Visual C#)。选择哪种语言取决于您的项目、资源和对特定语言的熟悉程度。

    Microsoft 已撰写了多篇知识库文章来介绍如何在 Visual Studio .NET 中执行常见的 Office 任务。由于已经有了许多其他文章,所以本文的目的只是帮助您组织这些内容,并且为您提供一些必须了解的重要信息,以便能够解决您在使用 .NET 时出现的问题并提高编程效率。

    返回页首

    .NET Framework 的重要功能更改

    大多数使用 Visual Studio .NET 的开发人员都希望使用与 Microsoft .NET Framework 联系密切的语言进行开发。使用 .NET Framework 进行 Office 开发时要注意一些重要更改。如果您使用 Visual Basic、Visual C# 或第三方的 .NET 托管语言编写代码,一定要熟悉这些更改,这样才会知道应该如何设计 Office 解决方案的结构。

    注意:本节仅适用于托管语言。如果您使用的是 MFC 或 ATL,除非准备在项目中的某处使用 Visual C++ 托管扩展,否则可以安全地跳过本节。如果不熟悉托管语言与非托管语言之间的区别,请阅读下面一节。

    .NET Framework 是关于托管代码的。托管代码是面向对象的、类型安全的、内存托管的安全代码,并且其中的绝大部分是可移植代码。这些代码根据需要(或在安装过程中)从其原来的格式(称为中间语言 (IL))编译为能够在处理器上真正运行的机器码。此外,Microsoft 还定义了一组类(包括名称空间),它们组成托管代码的运行时环境,称为公共语言运行库。公共语言运行库是 .NET 中所有托管语言的编程主体,它使您能够控制编写程序时必须具备的所有元素。

    由于使用 .NET Framework 编写的程序比早期的程序更稳定、更安全,因此它们运行起来自然也更安全。不过,获得这一功能和灵活性是要付出代价的。这代价就是公共语言运行库管理代码的方式与早期程序之间有着结构上的差异。对于熟悉在 Visual Studio 6.0 中进行 Office 开发的开发人员,请考虑以下五个重要的功能更改,以及这些功能更改对项目的影响:

    1. COM 互操作性:从某些方面来看,.NET Framework 是由 Microsoft 早先设计的组件对象模型 (COM) 演变而来的,而这是面向 Internet 而转变的。.NET Framework 与 COM 有着很大的不同,它与 COM 开发人员熟悉的组件结构类型有着根本区别。由于 Office 是围绕 COM 和 OLE 生成的,因此在使用 Office 时,您仍然必须使用 COM 接口。Microsoft 及早意识到了这个问题,因此在 .NET Framework 中内置了对早期 COM 通信(在 .NET 中称之为 COM Interop)的支持。该互操作层的作用是在 .NET 代码与您打算使用的 COM 对象之间添加一个“填补程序”,这样,任何一方都不知道它正在与自己的异类通信。换句话说,COM 对象的表现与公共语言运行库的任意 .NET 对象类似,而 .NET 客户端的表现与 COM 服务器的 COM 客户端类似。如果您打算在 Visual Studio .NET 中进行 Office 开发,必须熟悉 COM Interop。
    2. 不使用变量:.NET 托管语言使用公共语言运行库中的公共数据类型系统。该类型系统有一个重要特点:所有数据类型都继承单独一种“对象”类型,这种“对象”类型允许以多态形式处理数据而不需要其他外部类型(例如,COM 或 OLE 变量)。因此,.NET Framework 不使用变量。如果从 Microsoft Visual Basic for Applications (VBA) 或 Visual Basic 6.0 移植 Office 代码,您必须将变量作为对象重新键入。新的对象类型不仅可以包含“自动化”(IDispatch*) 对象,而且还可以包含其他数据类型。仔细观察您的代码如何使用这些类型,并根据需要添加类型检查。
    3. 垃圾回收:托管语言使用垃圾回收器管理内存。与使用引用模型相比,使用该内存模型有助于 .NET 项目更好地执行和伸缩。它还有助于减少循环引用导致的意外内存泄漏。尽管它具有这些优点,但也存在一个副作用,那就是垃圾回收器的不确定性,这可能会让熟悉 Visual Basic 6.0 或 VBA 的开发人员感到困惑。在 VBA 或 Visual Basic 6.0 中释放对象引用时,会立即释放所引用的对象并允许它关闭,但在 .NET 中却不再是这样。由于使用垃圾回收器,释放对象并不表示对象已被清除,这样,可使确定性程序(如 Office COM 服务器)在内存中的保留时间长于预期时间。
    4. 实时 (JIT) 编译:为了在各平台之间通用,托管代码采用 IL 的形式。这意味着必须在第一次执行代码时实时编译该代码。Microsoft 已为托管语言开发了一种快速高效的 JIT 进程,但这种按需编译的要求意味着:客户端或组件的加载速度可能会稍慢于编译非托管代码时的速度。此外,公共语言运行库在处理 JIT 时,既要进行安全检查,又要进行类型检查,它在某些执行环境中可能不会运行您的代码。
    5. OLE 的限制:常规 OLE 不是公共语言运行库的一部分,在“对象”表示形式方面,它正逐渐由 XML 和 HTML 取代,在链接远程数据源方面,它正逐渐由 Microsoft SOAP 取代。目前还没有可以完全(在所有方面)取代 OLE 的功能,.NET 也没有为托管代码中的传统 OLE 包容功能或服务提供内置支持。因此,新的 WinForms 包(由 Visual Basic 和 Visual C# 两者使用)中没有 OLE 容器控件。如果您的解决方案需要 Office OLE 包容,请开发非托管宿主或使用 WebBrowser 控件(或自定义的 OLE 宿主控件)来处理 OLE。

    记住了这些问题,您在 Visual Studio .NET 中进行 Office 开发时,就能更好地处理与 Visual Studio 6.0 的不同之处。

    返回页首

    从 Visual Studio .NET 自动运行 Office

    使 Microsoft Office 自动运行是将 Office 功能并入自定义解决方案中的一种方便灵活的方法。虽然 Office 的未来版本将与 .NET Framework 集成在一起,但 Office 的当前版本和早期版本尚未做到这一点。为了使 Office 自动运行而必须做的大部分操作与在 Visual Studio 6.0 中所做的操作相同。Office 基于 COM,因此必须使用 COM 来以编程方式更改 Office。某些细节有变化,但总体方法没有变。

    要从 Visual Studio .NET 自动运行 Microsoft Office 应用程序,您需要下载和安装用于 Microsoft Office XP 的主 Interop 程序集 (PIA)。 有关 Office XP PIA 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    328912 INFO:Microsoft Office XP PIA 可供下载


    使用 Office XP PIA 的开发人员必须知道这些程序集与 Office 对象模型略有不同。因此,如果您要移植现有应用程序,可能必须更改代码。此外,PIA 所表现出来的行为与 .NET 一致,如下所示:
    释放时间不确定
    缺少对默认方法或属性的支持
    访问集合中的项目所使用的方法不同
    有关 Office XP PIA 的已知问题的更多信息,请访问下面的 Microsoft Web 站点:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_piaissues.asp

    开发 Office 解决方案时,您首先必须知道的问题是该项目必须使用 Office 的哪些版本。兼容性是一个重要问题,如果需要代码使用某些特定版本,那么必须使用需要代码与之兼容的 Office 的最低版本进行大部分的开发和初始测试。例如,如果需要项目使用 Office 2000 及更高版本,则在开发中使用 Office 2000(以及 Office 2000 类型库)。这样,您就可以确保能够使用 Office 2000 和更高版本来运行项目(但不一定能使用 Office 97)。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    244167 INFO: Writing Automation Clients for Multiple Office Versions
    确定必须使用的 Office 版本时,一定要考虑您需要如何在 Visual Studio .NET 中执行自动化:
    按照在 Visual C++ 6.0 中使用的方法在 Visual C++ 中使用非托管代码。- 或者 -

    在 Visual Basic、Visual C# 或具有托管扩展的 Visual C++ 中使用托管代码,并使用公共语言运行库的 COM Interop 服务来处理 COM 调用。
    返回页首

    使用非托管代码(Microsoft 基础类 (MFC) 和活动模板库 (ATL))实现自动化

    您可以使用 Visual C++ .NET 生成非托管的 COM 客户端和服务器,就像在 Visual C++ 的早期版本中一样。MFC 和 ATL 框架在 COM 或 OLE 方面没有大的改动,因此使用 Office 自动化的现有代码可以移植到 Visual C++ .NET 中而基本上不会产生什么问题。而且,执行自动化的方式(使用 MFC 包装类或 #import)与您已熟悉的方式类似,因此,不用学习任何新技术。

    返回页首

    在 MFC 中创建类包装

    对于习惯使用 MFC 的开发人员来说,唯一真正的改动就是删除了 Visual Studio IDE 的类向导。这一改动会影响您在开始新项目时为 Office 应用程序创建 MFC 类包装的方式。 有关如何从 Visual C++ .NET 中使用类型库新建一组 MFC 包装类的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    307473 HOWTO:从 Visual C++ .NET 使用类型库进行 Office 自动化
    生成的包装类的用法与使用 Visual Studio 6.0 创建的包装类的用法大致相同。您可以让 Visual Studio .NET 为每个导入类创建一个单独的文件。另外,当您使用 Office 类型库时,新的类生成器也存在一些问题。 有关这些问题以及用于避免这些问题的方法的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    311407 BUG: MFC Class Wizard Does Not Resolve Naming Conflicts Between Windows APIs and COM Interface Methods
    311408 BUG: 'Read-Only' Warning When Adding an MFC Class From a Type Library
    返回页首

    使用 MFC 的自动化示例

    有关如何从 Visual Studio .NET 使用 MFC 自动运行 Office 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    Microsoft Excel
    308292 HOWTO: Automate Excel to Create And Format a New Workbook Using C++ .NET and MFC
    308407 HOW TO:从 C++ .NET 和 MFC 实现 Excel 的自动化操作以便使用数组填充或获取某个范围的数据
    309301 HOW TO: Handle Events for Excel by Using Visual C++ .NET
    Microsoft Word
    308338 HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual C++ .NET
    309294 HOW TO: Handle Word Events by Using Visual C++ .NET and MFC
    Microsoft PowerPoint
    308336 HOWTO: Use Automation to Create and Show a PowerPoint Presentation with Visual C++ .NET and MFC
    309309 HOW TO: Handle PowerPoint Events by Using Visual C++ .NET and MFC
    共享 Office 功能
    306686 HOWTO:从 Visual C++ .NET 使用自动化运行 Office 宏
    312626 HOW TO: Use Automation to Create Office Command Bars and Controls by Using Visual C++ .NET
    310744 HOW TO:使用 Visual C++ .NET 和 MFC 关闭 Office 应用程序显示的对话框

    返回页首

    使用托管代码(Visual Basic 或 Visual C#)实现自动化

    从托管代码自动运行 Office 与早期的 Visual Basic 编程略有不同。使用托管语言执行自动化时,并未直接绑定到对象。您的通信通过一个中间“包装”来传送,该“包装”可将本机 .NET 数据类型和调用转换为 COM 类型和调用(也可将后者转换为前者)。

    返回页首

    .NET 中的 COM Interop

    公共语言运行库的 COM Interop 服务允许 .NET 中运行的托管代码与早期的 COM 服务器(如 Office)通信,方法是在托管代码与 COM 服务器之间使用包装。该包装称为 Interop 程序集。在 .NET 项目中添加对 COM 服务器的引用(例如,它的类型库)时,Visual Studio .NET 使用类型信息生成运行库可调用包装 (RCW) 的代码,该代码随即被导入到项目中。这些托管代码将被编译到单独的程序集(即 Interop 程序集)中,并由 .NET Framework 访问,就好像它是任何其他 .NET 托管库一样。RCW 充当托管代码与 COM 服务器之间的媒介。

    如果所编写的 COM 服务器能够支持 .NET,则它可以提供一个安装并注册到全局程序集缓存中的主 Interop 程序集 (PIA)。这些程序集都是共享程序集,它们被视为在 .NET 项目中引用早期 COM 服务器的最佳方法。目前,Microsoft 只提供了 Office XP(以及更高版本)的 PIA。现在,您已经可以下载这些 PIA,并且可以随您的项目一起重新分发它们。 有关 Office XP PIA 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    328912 INFO:Microsoft Office XP PIA 可供下载
    如果您的项目需要自动运行 Office 2000,则必须为 Office/MSO、VBA 扩展性以及要自动运行的 Office 应用程序创建自己的 Interop 程序集 (IA)。这些自定义 IA 应被视为应用程序的一部分,并且应该与项目的其余部分一起部署到应用程序文件夹中。虽然 Visual Studio .NET 可以使用 Tlbimp.exe 实用工具自动创建这些程序集,但它们是自定义程序集,不应作为全局对象在全局程序集缓存中注册。

    有关 .NET 中的 COM Interop 的其他信息,请参见以下 MSDN Web 站点中 Microsoft Developer Network (MSDN) 库的 COM Interop 部分:
    Advanced COM Interop Documentation (MSDN Online Library)(高级 COM Interop 文档(MSDN 联机库))
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpconadvancedcominterop.asp
    返回页首

    从 RCW 绑定到 Office 应用程序

    从类型库创建的 Interop 程序集使用早期绑定与 COM 项目进行通信。但是,如果您必须让绑定细节保持通用状态(例如,如果您需要代码自动运行多种 Office 应用程序类型,但不必明确知道具体的类型),仍然可以在 Visual Studio .NET 中进行晚期绑定。 有关 .NET 中的绑定选项的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    304661 HOWTO: Use Visual Basic .NET for Binding for Office Automation Servers
    302902 HOWTO:用 Visual C# .NET 进行 Office 自动化服务器的绑定
    晚期绑定的优点是不必使用 RCW(或生成/传送自定义 Interop 程序集),而且在各版本之间更为通用。它的缺点是在 Visual Basic .NET 中实现它比在 Visual Basic 6.0 中实现它更为困难,而且,由于它必须在运行时查找 DISPID,因此它还会影响性能。

    除了绑定外,另一个重要问题是对象实例化。如果使用 Interop 程序集,特定 Office 应用程序的 RCW 将在您使用 New 运算符时控制对象实例化。RCW 暗中调用相应的 COM 例程(例如 CoCreateInstance)来创建该应用程序的新实例供您的代码使用。如果要显式控制对象实例化或绑定到已在运行的应用程序实例,您可以在 Visual Basic .NET 中使用 GetObject,或在 Visual C# 中使用 GetActiveObject。不过,如果 Office 应用程序至少已获得并失去了一次焦点,则它们只会在运行对象表 (ROT) 中自行注册。如果通过代码实现这一点,则计时和焦点对于代码能否运行是至关重要的。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    316126 HOW TO: Use Visual C# .NET to Automate a Running Instance of an Office Program
    316125 PRB: Visual C# .NET Error Attaching to Running Instance of Office Application
    308409 PRB:在将 GetObject 或 GetActiveObject 用于正在运行的 Office 应用程序实例时出现 Visual Basic .NET 错误
    返回页首

    从 RCW 中处理事件

    .NET Framework 支持类型安全的回调函数指针,以便将通知消息回调到单个客户端(如典型的 COM 事件)或多个客户端(如异步广播)。处理这一回调机制的 .NET 对象称为委派,对于熟悉 COM 的开发人员,虽然“委派”还有其他用途,但可以考虑将它作为处理 COM 事件的一种方式。

    从类型库创建 RCW 时,该库中描述的所有事件方法将被包装以形成“委派”类,该类可用于处理事件。要接收事件,您可以实现处理事件的函数,为绑定到该函数的委派创建实例,然后将该委派附加到要从中接收事件的源对象。下面是一个示例:

    // in Visual C# where <B>CellsChange</B> is a function that you have implemented:
     EventDel_CellsChange = new Excel.DocEvents_ChangeEventHandler( CellsChange);
     xlSheet1.Change += EventDel_CellsChange;
    
    ' in Visual Basic .NET:
     EventDel_CellsChange = New Excel.DocEvents_ChangeEventHandler(AddressOf CellsChange)
     AddHandler xlSheet1.Change, EventDel_CellsChange
    Visual Basic 开发人员还可以利用 WithEventsHandles 关键字来简化该过程,使代码更容易阅读。如果使用 WithEvents 声明对象,就可以将 Handles 关键字添加到回调函数中,这样 Visual Basic .NET 会自动为您绑定“委派”。下面是一个示例:

    // in Visual Basic .NET:
     Private WithEvents xlSheet1 As Excel.Worksheet
     Private Sub xlSheet1_Change(ByVal Target As Excel.Range) Handles xlSheet1.Change
       Debug.WriteLine("You Changed Cells " + Target.Address + " on Sheet1")
     End Sub
    有关在 Visual Basic .NET 中使用上述两种方法的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    302814 HOW TO: Handle Events for Excel by Using Visual Basic .NET
    如果 RCW 没有所需事件方法的委派,如果您必须动态地为回调提供委派,或者,如果基于其他考虑必须更改回调,则必须使用 COM IConnectionPointIConnectionPointContainer 接口来设置自己的接收器。这样做比较麻烦,但可能是可靠地为某些服务器接收事件的唯一方式。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    308330 HOWTO:用 Visual Basic .NET 处理 PowerPoint 事件
    返回页首

    使用托管代码(Visual Basic 或 Visual C#)的自动化示例

    有关使用 .NET 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    Microsoft Excel
    301982 HOWTO:从 Visual Basic .NET 自动化 Microsoft Excel
    302084 HOWTO:从 Visual C# .Net 自动化 Microsoft Excel
    302814 HOW TO: Handle Events for Excel by Using Visual Basic .NET
    302815 HOW TO: Handle Events for Excel by Using Visual C# .NET
    302094 HOWTO:从 Visual Basic .Net 自动化 Excel 以使用数组填充或获取一个值范围中的数据
    302096 HOWTO:用 Visual C# .NET 自动化 Excel 以使用数组填充或获取一个值范围中的数据
    306022 HOW TO: Transfer Data to an Excel Workbook by Using Visual Basic .NET
    306023 HOW TO: Transfer Data to an Excel Workbook by Using Visual C# .NET
    307021 HOW TO: Transfer XML Data to Microsoft Excel 2002 by Using Visual Basic .NET
    307029 HOW TO:使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
    Microsoft Word
    316383 HOW TO: Automate Word from Visual Basic .NET to Create a New Document
    316384 HOW TO:利用 Visual C# .NET 使 Word 自动新建文档
    301656 HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual Basic .NET
    301659 HOWTO:利用 Visual C# .NET 使 Microsoft Word 自动执行邮件合并
    302816 HOWTO: Handle Events for Microsoft Word Using Microsoft Visual Basic .NET
    302817 HOWTO: Handle Events for Word Using Visual C# .NET
    Microsoft PowerPoint
    303717 HOWTO: Use Automation to Create and Show a PowerPoint Presentation with Visual Basic .NET
    303718 HOWTO:在 Visual C# .Net 中使用自动化创建和显示 PowerPoint 演示文稿
    308330 HOWTO:用 Visual Basic .NET 处理 PowerPoint 事件
    308825 HOWTO: Handle PowerPoint Events With Visual C# .NET
    Microsoft Access
    317113 HOW TO:从 Visual Basic .NET 自动化 Microsoft Access
    317114 HOW TO: Automate Microsoft Access From Visual C# .NET
    Microsoft Visio
    305199 HOWTO: Automate Visio with Visual Basic .NET
    Microsoft MapPoint
    305200 HOW TO: Automate MapPoint by Using Visual Basic.NET
    302897 HOW TO: Automate the MapPoint 2002 Control and Save the Map as HTML in Visual Basic .NET
    共享 Office 功能
    303017 HOWTO: Use Automation to Create Office Command Bars and Controls with Visual Basic .NET
    303018 HOWTO: Use Automation to Create Office Command Bars and Controls with Visual C# .NET
    302281 HOWTO:使用 Visual Basic .Net 获取 Office 自动化服务器的窗口句柄
    302295 HOWTO:使用 Visual C# .Net 获取 Office 自动化服务器的窗口句柄
    306682 HOWTO:从 Visual Basic .NET 使用自动化运行 Office 宏
    306683 HOW TO:从 Visual C# .NET 使用自动化运行 Office 宏
    303294 HOWTO: Use Automation to Get and Set Office Document Properties with Visual Basic .NET
    303296 HOWTO:在 Visual C# .Net 中使用自动化获取和设置 Office 文档属性
    307292 HOWTO:使用 Visual Basic .NET 关闭 Office 应用程序显示的对话框
    返回页首

    已知的有关从托管代码实现自动化的问题

    由于公共语言运行库使用垃圾回收器管理内存,并且 RCW 本身是托管对象,因此不能保证在释放对自动化对象的引用后,该对象的生存期一定会立即结束。RCW 被标记为待回收的垃圾,当垃圾回收器准备释放更多内存时,将释放该 RCW。这意味着,虽然您不再使 Office 应用程序自动运行,但由于垃圾回收器尚未释放 RCW,因此该应用程序仍保持加载状态。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    317109 PRB:使用 Visual Studio .NET 客户端执行自动化功能后不退出 Office 应用程序
    有关在托管代码中使用 Office 对象时可能遇到的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    315981 Visual Basic .NET '[Method] is ambiguous across the inherited interfaces' Error Message When Using Office Automation
    316653 PRB: Error Using WithEvents or Delegates to Handle Excel Events from Visual Basic .NET or Visual C# .NET
    320369 BUG: Old Format or Invalid Type Library Error When Automating Excel 2002
    317157 PRB: Errors When You Reference the Access 10.0 Type Library with Visual Studio .NET
    返回页首

    使用 ASP.NET 开发 Office Web 解决方案

    ASP.NET 是 Visual Studio .NET 中一个的新开发平台,它使开发人员能够创建企业级应用程序。通过 ASP.NET,您可以用任何支持 .NET 的语言开发 Web 应用程序,并且可以充分利用 .NET Framework 的丰富功能。ASP.NET Web 窗体使您能够为 Web 应用程序生成用户界面。虽然 Web 窗体为 Web 应用程序提供用户界面,但页面的隐藏代码(为生成页面输出而运行的代码)仍然在服务器计算机上运行。Microsoft 建议不要从 Web 窗体或从其他非交互式帐户自动运行 Office 产品。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    257757 INFO: Considerations for Server-Side Automation of Office
    服务器端自动化的其他方法包括客户端自动化、流式传输多用途 Internet 邮件扩充协议 (MIME) 内容以及 Office Web 组件。下面一节将逐一介绍这些方法。

    返回页首

    在 ASP.NET 中使用 Office Web 组件

    Office Web 组件 (OWC) 提供了让 Web 项目中包含 Office 功能的最佳方法。这些组件可以在 ASP.NET 中用作客户端控件,就像在任何 HTML 页中一样。此外,OWC 10 (Office XP) 还提供了适当功能,使它成了一种适用于规模有限的 Web 站点的良好的服务器端组件。 有关在 ASP.NET 中开发服务器端解决方案时如何使用 OWC 10 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    303016 HOW TO:与 Office XP 图表组件和 ASP.NET 一起使用数据集
    315695 HOW TO: Use the Office XP Web Components with XML Data Generated by an XML Web Service Created Using ASP.NET
    返回页首

    从 ASP.NET 中使用文档流

    如果 Office Web 组件没有您需要的功能,您可以配置 HTML 页来启动客户机上的 Office 应用程序,然后从 Web 服务器加载数据。这样,用户就能使用 Office 的强大功能来修改、编辑或保存返回的数据。

    您可以使用多种方法将数据返回客户端,包括 XML Web 服务和 MIME 内容。XML Web 服务的集成是 Visual Studio .NET 中的新增功能。Visual Studio .NET 使开发人员能够轻松创建和使用 XML Web 服务。XML Web 服务通过标准的 Web 协议向用户提供服务。用户可以使用 Visual Studio .NET 应用程序,也可以使用 Microsoft SOAP 工具包连接到 XML Web 服务。有关 Soap 工具包的其他信息,请访问下面的 Microsoft Developer Network (MSDN) Web 站点: 此外,使用 Office XP Web 服务工具包,开发人员还能够直接从 VBA 引用 XML Web 服务,而不必使用 .NET Framework。有关 Office XP Web 服务工具包的其他信息,请访问下面的 Microsoft Developer Network (MSDN) Web 站点:

    向客户机发送数据的另一种方法是通过使用 MIME 类型以流式传输内容。将 Web 页的 MIME 类型更改为特定值后,浏览器将启动相关联的应用程序来显示数据。如果使用此方法,则在设置内容类型之后,可以在 Office 应用程序中打开的任何类型的数据(例如,RTF、HTML 和二进制数据)便都可以发送到客户端。由于 ASP.NET Web 控件生成发送到客户端的 HTML,因此您可以对 Web 页的内容类型进行设置,以便在 Office 应用程序中显示控件内容。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    318425 HOW TO: Send and Receive Binary Documents by Using an ASP.NET Web Service and Visual C# .NET
    318756 PRB: Excel and Word Content Do Not Stream as Expected from ASP.NET
    311461 HOW TO: Use ASP.NET or Visual Basic.NET to Transform XML To Rich Text Format (RTF) For Microsoft Word 2002
    319180 HOW TO:通过使用 Visual Basic .NET 和 ASP.NET 将数据集转换为 Excel 的电子表格 XML
    317719 HOW TO: Export Data in a DataGrid on an ASP.NET WebForm to Microsoft Excel
    316934 HOW TO:在 Visual Basic .NET 中使用 ADO.NET 检索和修改 Excel 工作簿中的记录
    307033 HOWTO: Use an XML Web Service by Using ASP.NET from an Office VBA Macro in Word or Excel
    返回页首

    使用 Visual Studio .NET 扩展 Office

    生成在 Office 中运行的可扩展组件一直是 Office 开发的重要部分。Office 2000 和 Office XP 都允许使用 COM 加载项对宿主应用程序进行编程扩展。Office XP 中引入了一些功能,允许使用智能标记识别器和操作组件来扩展文档内容。由于这两种解决方案很大程度上都依赖于 COM,因此决定在 Visual Studio .NET 中生成 COM 组件之前,请先考虑一下使用完全编译的 COM 组件的好处。

    但是,如果您的设计需要使用 .NET 功能,或是它能从使用 .NET 中受益,则可以在 Visual Studio .NET 中创建这两类加载项。熟悉 COM 加载项或智能标记在 Visual Studio 6.0 中如何工作的开发人员必须记住以下几点:
    1. 必须注册 COM 加载项。默认情况下,在 Visual Basic 或 Visual C# 中创建的托管 DLL 不能用作 COM 组件。要注册它们,您必须在项目属性的“生成”选项下将注册 COM Interop 值设置为 True
    2. 为了使 Office 能够正确加载组件,应该为组件指定强名称,然后在全局程序集缓存 (GAC) 中注册它。默认情况下,典型的 .NET DLL 项目不执行此操作。
    3. 由于托管代码不是本机代码,因此,为组件创建的 COM 注册表项指向 .NET 运行时引擎 (mscoree.dll),而不指向您的程序集。因为 mscoree.dll 没有经过数字签名,而 Office 又根据数字签名来确定加载项是否安全,所以,即使您对程序集进行了数字签名,系统也会提示用户启用或禁用加载项。有关其他信息,请参见本文内下文中的 Office 安全性和托管代码 一节。
    请记住,Office 的当前版本是围绕 COM(而不是 .NET)设计的。如果性能是项目成功与否的关键因素,那么请考虑使用非托管语言(如 MFC、ATL 或 Visual Basic 6.0)。

    返回页首

    COM 加载项

    COM 加载项是开发人员最常用的一类扩展性解决方案。为了将加载项与宿主应用程序完全集成在一起,开发人员必须从应用程序中使加载项自动运行。因此,开发人员需要熟悉本文内上文中的 从 Visual Studio .NET 自动运行 Office 一节。

    有关如何在 Visual Studio .NET 中为创建 COM 加载项奠定基础的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    302896 HOW TO:使用 Visual Basic .NET 生成 Office COM 外接程序
    302901 HOW TO:使用 Visual C# .Net 生成 Office COM 外接程序
    316723 PRB: Visual Studio .NET Shared Add-in Is Not Displayed in Office COM Add-ins Dialog Box
    返回页首

    智能标记

    智能标记是 Office XP 中引入的一项新技术。智能标记提供了一种新的文档交互方式。目前,智能标记只能用于 Microsoft Word 2002 和 Microsoft Excel 2002。有关智能标记的其他信息,请参阅下面的 Microsoft Developer Network (MSDN) Web 站点上的智能标记软件开发工具包 (SDK): 有关如何使用 Visual Studio .NET 开发智能标记加载项的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    306058 HOW TO:使用 Visual Basic .Net 创建 Office XP 智能标记 DLL
    306422 HOW TO: Create an Office XP Smart Tag DLL by Using Visual C# .NET
    返回页首

    Office 安全性和托管代码

    由于托管代码不是本机代码,因此,为 Office 组件(使用 .NET 生成)创建的 COM 注册表项指向 .NET 运行时引擎 (mscoree.dll),而不指向您的程序集。因为 mscoree.dll 没有经过数字签名,而 Office 又根据数字签名来确定加载项是否安全,所以,即使您对程序集进行了数字签名,用户也会收到宏警告,提示他们启用或禁用加载项。
    316724 PRB:'mscoree.dll contains macros' Prompt When Starting Office Application
    要避免出现这一宏警告,您可以对组件使用一个“填补程序”。有关开发和部署填补程序解决方案的其他信息,请参阅 Microsoft Developer Network (MSDN) Web 站点上的以下文章:
    Deployment of Managed COM Add-Ins in Office XP(在 Office XP 中部署托管 COM 加载项)
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_shim.asp

    Using the Smart Tag Shim Solution to Deploy Managed Smart Tags in Office XP(使用智能标记填补程序解决方案在 Office XP 中部署托管智能标记)
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsmarttag/html/odc_stshim.asp

    Using the COM Add-in Shim Solution to Deploy Managed COM Add-ins in Office XP(使用 COM 加载项填补程序解决方案在 Office XP 中部署托管 COM 加载项)
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_comshim.asp
    返回页首

    OLE 文档和存储

    对于在 Windows 应用程序中编辑或查看 Office 文档,Visual Studio .NET 没有提供任何新功能。实际上,对于某些熟悉 Visual Basic 的开发人员来说,它似乎还有一些退步,因为它不再提供他们早已熟悉的 OLE 容器控件。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    304562 INFO:Visual Studio .NET 不为 Win 窗体提供 OLE 容器控件
    不过,这是有原因的。OLE 基于 COM,而 .NET 不基于 COM。为了适应公共语言运行库的跨平台设计,OLE 解决方案不能紧紧地绑定到这一框架。如果您的解决方案需要 OLE 功能,可以使用 WebBrowser 控件或定制的 OLE 文档查看器。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    304643 HOWTO: Use the WebBrowser Control to Open an Office Document in Visual Basic .NET
    304662 HOWTO:使用 WebBrowser 控件在 Visual C# .Net 中打开 Office 文档
    311765 SAMPLE: Visual C++ ActiveX Control for Hosting Office Documents in Visual Basic or HTML
    有关如何在非托管的 MFC 或 ATL 项目中使用现有 OLE 功能生成解决方案的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    316587 HOW TO:Automate Embedded Office ActiveX Documents with C++ .NET
    316207 HOW TO:通过使用 C++ .NET 和 MFC 嵌入并自动化 Word 文档
  • 相关阅读:
    关于global和$GLOBALS[]的一些实践
    java环境配置的新手教程
    echart图表 resize()方法使用
    使用git上传下载项目
    windows 系统新建 vue 项目的坑
    Java版求1000以内的完全数
    Java版经典兔子繁殖迭代问题——斐波那契(Fibonacci)数列
    Java版冒泡排序和选择排序
    AngularJS 动画总结
    Mac下sublime text 的“package control”安装
  • 原文地址:https://www.cnblogs.com/stone/p/117992.html
Copyright © 2011-2022 走看看