更新迁移到 .NET Framework 4 的 Excel 和 Word 项目

更新:2010 年 5 月

如果您的 Excel 或 Word 项目使用下列任何功能,则在目标 Framework 更改为 .NET Framework 4 后,您必须修改代码:

  • 智能标记

  • GetVstoObject 和 HasVstoObject 方法

  • 文档级项目中的生成的类

  • 文档中的 Windows 窗体控件

  • Word 内容控件事件

  • OLEObject 和 OLEControl 类

  • Controls.Item(Object) 属性

  • 派生自 CollectionBase 的集合

还必须从重定向到 .NET Framework 4 的 Excel 项目中移除 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute。Visual Studio 不会自动移除此特性。

从 Excel 项目中移除 ExcelLocale1033 特性

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 已从用于面向 .NET Framework 4 的解决方案的 Visual Studio 2010 Tools for Office Runtime 部分中移除。 .NET Framework 4 中的公共语言运行时 (CLR) 始终将区域设置 ID 1033 传递到 Excel 对象模型,您将不再能够使用此特性来禁用此行为。 有关更多信息,请参见使用各种区域设置对 Excel 中的数据进行格式设置

移除 ExcelLocale1033Attribute

  1. 在 Visual Studio 中打开项目后,打开**“解决方案资源管理器”**。

  2. 在**“属性”节点(适用于 C#)或“我的项目”**节点(适用于 Visual Basic)下,双击 AssemblyInfo 代码文件以在代码编辑器中打开。

    提示

    在 Visual Basic 项目中,必须单击“解决方案资源管理器”中的“显示所有文件”按钮,才能查看 AssemblyInfo 代码文件。

  3. 找到 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute,并从该文件中移除或注释掉该特性。

    <Assembly: ExcelLocale1033Proxy(True)>
    
    [assembly: ExcelLocale1033Proxy(true)]
    

更新创建智能标记的代码

如果您的 Excel 或 Word 项目创建了智能标记,则您在更改目标 Framework 后,必须对代码进行以下更改:

  • 修改创建智能标记和操作对象的任何代码。

  • 修改定义具有自定义识别器的智能标记类的任何代码。

提示

在 Excel 2010 和 Word 2010 中已弃用智能标记。 有关更多信息,请参见智能标记概述

有关更多信息,请参见下面的说明。

创建智能标记和操作对象

您必须改变在代码中创建智能标记和操作对象的方式。 在面向 .NET Framework 3.5 的项目中,可以直接对智能标记和操作类型类进行实例化。 在面向 .NET Framework 4 的项目中,则不能直接对这些类型接口进行实例化。

如果项目的目标 Framework 已更改为 .NET Framework 4,则必须使用项目中的 Globals.Factory 属性提供的方法创建智能标记和操作对象。 有关更多信息,请参见智能标记的结构

下表列出了智能标记和操作类型,以及用于在面向 .NET Framework 4 的项目中创建类型实例的方法。

智能标记和操作类型

要在 .NET Framework 4 项目中使用的工厂方法

Microsoft.Office.Tools.Excel.Action

Microsoft.Office.Tools.Excel.Factory 类的 CreateAction 方法。

Microsoft.Office.Tools.Excel.SmartTag

Microsoft.Office.Tools.Excel.Factory 类的 CreateSmartTag 方法。

Microsoft.Office.Tools.Word.Action

Microsoft.Office.Tools.Word.Factory 类的 CreateAction 方法。

Microsoft.Office.Tools.Word.SmartTag

Microsoft.Office.Tools.Word.Factory 类的 CreateSmartTag 方法。

定义具有自定义识别器的智能标记类

如果您定义了自己的具有自定义识别器的智能标记类,则必须修改您的代码。 在面向 .NET Framework 3.5 的项目中,从 Microsoft.Office.Tools.Word.SmartTagMicrosoft.Office.Tools.Excel.SmartTag 类中派生类。 在面向 .NET Framework 4 的项目中,改为定义实现 Microsoft.Office.Tools.Word.ISmartTagExtensionMicrosoft.Office.Tools.Excel.ISmartTagExtension 接口的类。

有关更多信息,请参见智能标记的结构

更新使用 GetVstoObject 和 HasVstoObject 方法的代码

在面向 .NET Framework 3.5 的项目中,GetVstoObjectHasVstoObject 方法可用作项目中的下列某个本机对象的扩展方法:Microsoft.Office.Interop.Word.DocumentMicrosoft.Office.Interop.Excel.WorkbookMicrosoft.Office.Interop.Excel.WorksheetMicrosoft.Office.Interop.Excel.ListObject。 调用这些方法时,不必传递参数。 下面的代码示例演示如何在面向 .NET Framework 3.5 的 Word 外接程序中使用 GetVstoObject 方法。

Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject()
Microsoft.Office.Tools.Word.Document vstoDocument = 
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();

在面向 .NET Framework 4 的项目中,必须修改代码以便可以通过下列某种方式访问这些方法:

  • 您仍可以将这些方法作为 Microsoft.Office.Interop.Word.DocumentMicrosoft.Office.Interop.Excel.WorkbookMicrosoft.Office.Interop.Excel.WorksheetMicrosoft.Office.Interop.Excel.ListObject 对象的扩展方法来访问。 但是,现在必须将 Globals.Factory 属性返回的对象传递给这些方法。

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory)
    
    Microsoft.Office.Tools.Word.Document vstoDocument = 
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • 或者,您可以在 Globals.Factory 属性返回的对象上访问这些方法。 通过这种方式访问这些方法时,必须将要扩展的本机对象传递给这些方法。

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument)
    
    Microsoft.Office.Tools.Word.Document vstoDocument = 
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
    

有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿从文档级自定义项中的本机 Office 对象获取扩展对象

更新在文档级项目中使用已生成类的实例的代码

在面向 .NET Framework 3.5 的文档级项目中,项目中的生成的类派生自 Visual Studio Tools for Office Runtime中的下列类:

在面向 .NET Framework 4 的项目中,上面列出的 Visual Studio Tools for Office Runtime中的类型是接口而不是类。 面向 .NET Framework 4 的项目中的生成的类派生自 Visual Studio Tools for Office Runtime中的下列新类:

如果项目中的代码将某个生成的类的实例作为该生成的类派生自的基类,则您必须修改代码。

例如,在面向 .NET Framework 3.5 的 Excel 工作簿项目中,您可能具有一个帮助器方法,该方法对项目中生成的 Sheetn 类的实例执行某些工作。

Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.Worksheet)
    ' Do something to the worksheet object.
End Sub
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

如果将项目目标重定为 .NET Framework 4,则必须对代码进行下列某种更改:

  • 将调用 DoSomethingToSheet 方法的任何代码修改为在项目中传递 Microsoft.Office.Tools.Excel.WorksheetBase 对象的 Base 属性。 此属性返回一个 Microsoft.Office.Tools.Excel.Worksheet 对象。

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • 将 DoSomethingToSheet 方法参数修改为需要 Microsoft.Office.Tools.Excel.WorksheetBase 对象。

    Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.WorksheetBase)
        ' Do something to the worksheet object.
    End Sub
    
    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

更新在文档中使用 Windows 窗体控件的代码

必须将 Microsoft.Office.Tools.ExcelMicrosoft.Office.Tools.Word 命名空间的 using (C#) 或 Imports (Visual Basic) 语句添加到使用 Controls 属性以编程方式将 Windows 窗体控件添加到文档或工作表的任何代码文件的顶部。

在面向 .NET Framework 3.5 的项目中,添加 Windows 窗体控件的方法(如 AddButton 方法)在 Microsoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection 类中定义。

在面向 .NET Framework 4 的项目中,这些方法是可在 Controls 属性上使用的扩展方法。 若要使用这些扩展方法,您在其中使用这些方法的代码文件必须具有 Microsoft.Office.Tools.ExcelMicrosoft.Office.Tools.Word 命名空间的 using 或 Imports 语句。 在面向 .NET Framework 4 的新项目中,会自动生成该语句。 但是,在面向 .NET Framework 3.5 的项目中,不会自动添加该语句,因此,您在重定项目目标时必须添加该语句。

有关更多信息,请参见在运行时向 Office 文档添加控件

更新处理 Word 内容控件事件的代码

在面向 .NET Framework 3.5 的项目中,Word 内容控件的事件由泛型 EventHandler<TEventArgs> 委托处理。 在面向 .NET Framework 4 的项目中,这些事件由其他委托处理。

下表列出了面向 .NET Framework 4 的项目中的 Word 内容控件事件以及与这些事件关联的委托。

Event

要在 .NET Framework 4 项目中使用的委托

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

更新使用 OLEObject 和 OLEControl 类的代码

在面向 .NET Framework 3.5 的项目中,可以使用 Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl 类向文档或工作表添加自定义控件(如 Windows 窗体用户控件)。

在面向 .NET Framework 4 的项目中,这些类已由 Microsoft.Office.Tools.Excel.ControlSiteMicrosoft.Office.Tools.Word.ControlSite 接口替换。 必须将引用 Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl 的代码修改为引用 Microsoft.Office.Tools.Excel.ControlSiteMicrosoft.Office.Tools.Word.ControlSite。 除新名称之外,这些控件的行为方式与它们在面向 .NET Framework 3.5 的项目中的行为方式相同。

有关更多信息,请参见在运行时向 Office 文档添加控件

更新使用 Controls.Item(Object) 属性的代码

在面向 .NET Framework 3.5 的项目中,可以使用 Microsoft.Office.Tools.Word.Document.ControlsMicrosoft.Office.Tools.Excel.Worksheet.Controls 集合的 Item(Object) 属性来确定文档或工作表是否具有指定的控件。

在面向 .NET Framework 4 的项目中,已从这些集合中移除 Item(Object) 属性。 若要确定文档或工作表是否包含指定的控件,请改为使用 Document.ControlsWorksheet.Controls 集合的 Contains(System.Object) 方法。

有关文档和工作表的 Controls 集合的更多信息,请参见在运行时向 Office 文档添加控件

更新使用派生自 CollectionBase 的集合的代码

在面向 .NET Framework 3.5 的项目中,Visual Studio Tools for Office Runtime 中的多个集合类型派生自 CollectionBase 类,如 Microsoft.Office.Tools.SmartTagCollectionMicrosoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection

在面向 .NET Framework 4 的项目中,这些集合类型现在为不从 CollectionBase 派生的接口。 某些成员(如 CapacityListInnerList)在这些集合类型上不再可用。

请参见

概念

将 Office 解决方案迁移到 .NET Framework 4

智能标记的结构

内容控件

在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿

从文档级自定义项中的本机 Office 对象获取扩展对象

在运行时向 Office 文档添加控件

对 Office 项目中对象的全局访问

修订记录

日期

修订记录

原因

2010 年 5 月

增加了有关从 Excel 项目移除 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 的部分。

信息补充。