更新迁移到 .NET Framework 4.5 的 Excel 和 Word 项目
如果你的一个 Excel 或 Word 项目使用以下任何功能,且如果目标框架更改为 .NET Framework 4 或更高版本,则必须修改代码:
-
还必须从重定向到 .NET Framework 4 或更高版本的 Excel 项目中删除
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
和对Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy
类的引用。 Visual Studio 不会为你删除此属性或类引用。
从 Excel 项目中删除 ExcelLocale1033 属性
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
已从 Visual Studio 2010 Tools for Office Runtime 用于解决方案的部分中删除,该解决方案面向 .NET Framework 4 或更高版本。 .NET Framework 4 和更高版本中的公共语言运行时 (CLR) 始终将区域设置 ID 1033 传递给 Excel 对象模型,且你无法再使用此属性来禁用此行为。 有关详细信息,请参阅 Excel 解决方案的全球化和本地化。
若要删除 ExcelLocale1033Attribute
在 Visual Studio 中打开项目后,打开 “解决方案资源管理器”。
在 C# 的 “属性” 节点或在 Visual Basic 的 “我的项目” 节点下,双击 AssemblyInfo 代码文件以在代码编辑器中打开它。
注意
在 Visual Basic 项目中,必须单击 “解决方案资源管理器” 中的 “显示所有文件” 按钮,才能查看 AssemblyInfo 代码文件。
找到
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
并且将其从文件中删除或注释掉。
删除对 ExcelLocal1033Proxy 类的引用
使用 Microsoft Visual Studio 2005 Tools for the Microsoft Office System 创建的项目通过使用 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy
类实例化 Excel Application 对象。 此类已从 Visual Studio 2010 Tools for Office Runtime 用于解决方案的部分中删除,该解决方案面向 .NET Framework 4 或更高版本。 因此,你必须删除或注释禁用引用此类的代码行。
若要删除对 ExcelLocal1033Proxy 类的引用
在 Visual Studio 中打开该项目,然后打开 “解决方案资源管理器”。
在解决方案资源管理器中,打开 ThisAddin.cs(适用于 C# )或 ThisAddin.vb(适用于 Visual Basic)的快捷菜单,然后选择查看代码。
在代码编辑器的
VSTO generated code
区域中,删除或注释禁用以下代码行。
更新使用 GetVstoObject 和 HasVstoObject 方法的代码
在面向 .NET Framework 3.5 的项目中,GetVstoObject
或 HasVstoObject
方法在你项目中的以下本机对象之一上都可用作扩展方法:Document、Workbook、Worksheet 或 ListObject。 当调用这些方法时,你不需要传递参数。 以下代码示例演示如何在面向 .NET Framework 3.5 的 Word VSTO 外接程序中使用 GetVstoObject 方法。
Microsoft.Office.Tools.Word.Document vstoDocument =
Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();
在面向 .NET Framework 4 或更高版本的项目中,必须修改代码才能按照以下方式之一访问这些方法:
你仍可以在 Document、 Workbook、 Worksheet或 ListObject 对象上将这些方法作为扩展方法访问。 但是,现在你必须将
Globals.Factory
属性返回的对象传递给这些方法。或者,你可以在
Globals.Factory
属性返回的对象上访问这些方法。 当你以这种方式访问这些方法时,则必须将想要扩展的本机对象传递给该方法。Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
有关详细信息,请参阅在运行时扩展 VSTO 外接程序中的 Word 文档和 Excel 工作簿。
更新在文档级项目中使用生成类实例的代码
在面向 .NET Framework 3.5 的文档级项目中,项目中生成的类派生自 Visual Studio Tools for Office Runtime 中的以下类:
ThisDocument
: DocumentThisWorkbook
: WorkbookSheet
n:WorksheetChart
n:ChartSheet在面向 .NET Framework 4 或更高版本的项目中,上面列出的 Visual Studio Tools for Office Runtime 中的类型是接口,而不是类。 在面向 .NET Framework 4 或更高版本的项目中生成的类派生自 Visual Studio Tools for Office Runtime 中的以下新类:
ThisDocument
: DocumentBaseThisWorkbook
: WorkbookBaseSheet
n:WorksheetBaseChart
n:ChartSheetBase如果项目中的代码将某个生成的类的实例引用为它派生自的基类,则必须修改该代码。
例如,在面向 .NET Framework 3.5 的 Excel 工作簿项目中,可能存在一个帮助程序方法,该方法在项目中生成的
Sheet
n 类的实例上执行某些工作。
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
// Do something to the worksheet object.
}
如果你将项目重定向到 .NET Framework 4 或更高版本,则必须对代码进行以下更改之一:
修改调用
DoSomethingToSheet
方法的任何代码来传递你的项目中的 Base 对象的 WorksheetBase 属性。 该属性返回一个 Worksheet 对象。修改
DoSomethingToSheet
方法参数以预期返回 WorksheetBase 对象。
更新对文档使用 Windows 窗体控件的代码
必须在使用 Controls 属性以编程方式向文档或工作表添加 Windows 窗体控件的任何代码文件的顶部为 Microsoft.Office.Tools.Excel 或 Microsoft.Office.Tools.Word 命名空间添加 using (C#) or Imports (Visual Basic) 语句。
在面向 .NET Framework 3.5 的项目中,添加 Windows 窗体控件的方法(如 AddButton
方法)在 ControlCollection 和 ControlCollection 类中定义。
在面向 .NET Framework 4 或更高版本的项目中,这些方法是可在 Controls 属性上使用的扩展方法。 若要使用这些扩展方法,你在其中使用这些方法的代码文件必须包含 Microsoft.Office.Tools.Excel 或 Microsoft.Office.Tools.Word 命名空间的 using 或 Imports 语句。 此语句在面向 .NET Framework 4 或更高版本的新项目中自动生成。 但是,此语句不自动添加到面向 .NET Framework 3.5 的项目中,因此当你重定向项目时必须添加它。
有关详细信息,请参阅在运行时向 Office 文档添加控件。
更新处理 Word 内容控件事件的代码
在面向 .NET Framework 3.5 的项目中,Word 内容控件的事件由泛型 EventHandler<TEventArgs> 委托处理。 在面向 .NET Framework 4 或更高版本的项目中,这些事件现在由其他委托处理。
下表列出了 Word 内容控件事件以及在面向 .NET Framework 4 或更高版本的项目中与它们关联的委托。
更新使用 OLEObject 和 OLEControl 类的代码
在面向 .NET Framework 3.5 的项目中,你可以使用 Microsoft.Office.Tools.Excel.OLEObject
和 Microsoft.Office.Tools.Word.OLEControl
类向文档或工作表添加自定义控件(如 Windows 窗体用户控件)。
在面向 .NET Framework 4 或更高版本的项目中,这些类已替换为 ControlSite 和 ControlSite 接口。 你必须修改代码,使其引用 ControlSite 和 ControlSite 而不再引用 Microsoft.Office.Tools.Excel.OLEObject
和 Microsoft.Office.Tools.Word.OLEControl
。 不同于新名称,这些控件的行为方式与它们在面向 .NET Framework 3.5 的项目中的行为方式相同。
有关详细信息,请参阅在运行时向 Office 文档添加控件。
更新使用 Controls.Item(Object) 属性的代码
在面向 .NET Framework 3.5 的项目中,可以使用 Microsoft.Office.Tools.Word.Document.Controls 或 Microsoft.Office.Tools.Excel.Worksheet.Controls
集合的属性来确定文档或工作表是否具有指定的控件。
在面向 .NET Framework 4 或更高版本的项目中,Item(Object) 属性已从这些集合中删除。 若要确定文档或工作表是否包含指定的控件,请改用 Controls 或 Controls 集合的 Contains(System.Object) 方法。
有关文档和工作表的控件集合的详细信息,请参阅在运行时向 Office 文档添加控件。
更新使用派生自 CollectionBase 的集合的代码
在面向 .NET Framework 3.5 的项目中,Visual Studio Tools for Office Runtime 中的多个集合类型派生自 CollectionBase 类,例如 Microsoft.Office.Tools.SmartTagCollection
、Microsoft.Office.Tools.Excel.ControlCollection
和 Microsoft.Office.Tools.Word.ControlCollection
。
在面向 .NET Framework 4 或更高版本的项目中,这些集合类型现在是非派生自 CollectionBase 的接口。 一些成员在这些集合类型上不再可用,如 Capacity、 List和 InnerList。