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

如果您的 Excel 或 word 使用以下功能中的任何一个项,您必须修改代码,如果目标框架更改为 .NET Framework 4 或 .NET Framework 4.5:

  • GetVstoObject 和 HasVstoObject 方法

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

  • 文档中的 Windows 窗体控件

  • Word 内容控件事件

  • OLEObject 和 OLEControl 类

  • Controls.Item(Object) 属性

  • 派生自 CollectionBase 的集合

还必须删除 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 并且对 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy 从重定目标为 .NET Framework 4 或 .NET Framework 4.5的 Excel 项目的选件类。Visual Studio 不移除此特性或选件类为所引用。

从 Excel 项目中移除 ExcelLocale1033 特性

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 从 Visual Studio 的部分中移除了为解决方案使用面向 .NET Framework 4 或 .NET Framework 4.5for Office runtime 的 2010 个工具。公共语言。.NET Framework 4 和 .NET Framework 4.5 的运行时 (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)]
    

取消对 ExcelLocal1033Proxy 选件类

创建使用 Microsoft Visual Studio 2005 使用 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy 选件类的项目中,为 Microsoft Office system 工具实例化 Excel Microsoft.Office.Interop.Excel.Application 对象。此选件类从 Visual Studio 的部分已取消为解决方案使用面向 .NET Framework 4 或 .NET Framework 4.5for Office runtime 的 2010 个工具。因此,必须移除或注释掉引用此选件类的代码行。

若要移除对 ExcelLocal1033Proxy 类中

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

  2. 解决方案资源管理器,打开 ThisAddin.cs (C# 中) 或 ThisAddin.vb 的快捷菜单 (Visual Basic),然后选择 查看代码

  3. 在代码编辑器中,在 VSTO generated code 区域,请移除或注释掉下面的代码行。

    Me.Application = CType(Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(GetType(Excel.Application), Me.Application), Excel.Application)
    
    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    

更新使用 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 或 .NET Framework 4.5的项目中,可以通过以下方式之一必须修改代码以便访问这些方法:

  • 您仍可以将这些方法作为 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 工作簿

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

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

在面向 .NET Framework 4 或 .NET Framework 4.5的项目,在列表中的 Visual Studio Tools for Office Runtime 的类型上面是接口,而不是选件类。在面向 .NET Framework 4 或 .NET Framework 4.5 的项目中生成的选件类从在 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 或 .NET Framework 4.5,则必须对代码进行以下更改:

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

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

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

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

下表列出了与它们在项目面向 .NET Framework 4 或 .NET Framework 4.5的 Word 内容控件事件和委托。

Event

使用的委托。.NET Framework 4 和 .NET Framework 4.5 项目

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 或 .NET Framework 4.5的项目中,这些选件类中 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 或 .NET Framework 4.5的项目,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 或 .NET Framework 4.5的项目中,这些集合类型现在 CollectionBase不是从派生的接口。某些成员(如 CapacityListInnerList)在这些集合类型上不再可用。

请参见

概念

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

内容控件

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

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

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