更新移轉到 .NET Framework 4.5 的 Excel 和 Word 專案
如果您有使用下列任何功能的 Excel 或 Word 專案,當目標 Framework 變更為 .NET Framework 4 或更新版本時,即必須修改程式碼:
-
您也必須從重新導向到 .NET Framework 4 或更新版本的 Excel 專案中,移除
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
和對Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy
類別的參考。 Visual Studio 不會為您移除這個屬性或類別參考。
從 Excel 專案中移除 ExcelLocale1033 屬性
已從 Visual Studio 2010 Tools for Office Runtime 中用於以 .NET Framework 4 或或更新版本為目標之解決方案的部分中移除 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
。 .NET Framework 4 和更新版本中的 Common Language Runtime (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 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 中的下列類別:
%
%
Sheet
n: WorksheetChart
n: ChartSheet在面向 .NET Framework 4 或更新版本的專案中,上方所列 Visual Studio Tools for Office Runtime 中的類別都是介面,而不是類別。 在面向 .NET Framework 4 或更新版本的專案中產生的類別,其衍生自 Visual Studio Tools for Office Runtime 中的下列新類別:
%
%
Sheet
n: WorksheetBaseChart
n: ChartSheetBase如果專案中的程式碼將參考的其中一個產生的類別執行個體,視為其衍生來源的基底類別,您必須修改程式碼。
例如,在以 .NET Framework 3.5 為目標的 Excel 活頁簿專案中,您可能有個 helper 方法,會對專案中之產生的
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 Form 控制項的程式碼
您必須將 Microsoft.Office.Tools.Excel 或 Microsoft.Office.Tools.Word 命名空間的 using (C#) 或 Imports (Visual Basic) 陳述式新增至使用 Controls 屬性,以程式設計方式將 Windows 窗體控制項新增至文件或工作表的任何程式碼檔案的頂端。
在以 .NET Framework 3.5 為目標的專案中,加入 Windows Form 控制項的方法(例如 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 或更新版本的專案中,這些事件是由其他委派處理。
下表列出在面向 .NET Framework 4 或更新版本的專案中,與它們相關聯的 Word 內容控制項事件和委派。
更新使用 OLEObject 和 OLEControl 類別的程式碼
在以 .NET Framework 3.5 為目標的專案中,您可以使用 Microsoft.Office.Tools.Excel.OLEObject
和 Microsoft.Office.Tools.Word.OLEControl
類別,將自訂控制項 (例如 Windows Form 使用者控制項) 加入文件或工作表。
在面向 .NET Framework 4 或更新版本的專案中,ControlSite 和 ControlSite 介面已取代這些類別。 您必須修改原參考 Microsoft.Office.Tools.Excel.OLEObject
和 Microsoft.Office.Tools.Word.OLEControl
的程式碼,改為參考 ControlSite 和 ControlSite。 除了新名稱以外,這些控制項的行為方式和它們在以 .NET Framework 3.5 為目標的專案中一樣。
如需詳細資訊,請參閱在執行階段將控制項新增至 Office 文件。
更新使用 Controls.Item(Object) 屬性的程式碼
在面向 .NET Framework 3.5 的專案中,可以使用 Microsoft.Office.Tools.Word.Document.Controls 的 Item(Object) 屬性或 Microsoft.Office.Tools.Excel.Worksheet.Controls
集合來確定文件或工作表是否具有指定的控制項。
在面向 .NET Framework 4 或更新版本的專案中,Item(Object) 屬性已從這些集合中移除。 若要確定文件或工作表是否包含指定的控制項,請改用 Controls 的 Contains(System.Object) 方法或 Controls 集合。
如需深入了解文件和工作表的控制項集合,請參閱在執行階段將控制項新增至 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。