更新您要移轉至 .NET Framework 4 的 Excel 和 Word 專案
更新:2010 年 5 月
如果您擁有的 Excel 或 Word 專案使用下列任何功能,則必須在目標 Framework 變更為 .NET Framework 4 時修改程式碼:
智慧標籤
GetVstoObject 和 HasVstoObject 方法
文件層級專案中產生的類別
文件上的 Windows Form 控制項
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 已從 Visual Studio 2010 Tools for Office Runtime 中針對以 .NET Framework 4 為目標的方案使用的部分移除。 .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,然後將它從檔案中移除,或將它變成沒有作用的註解。
<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 專案中使用的 Factory 方法 |
---|---|
使用自訂辨識器定義智慧標籤類別
如果您使用自訂辨識器定義自己的智慧標籤類別,則必須修改程式碼。 在目標為 .NET Framework 3.5 的專案中,您會從 Microsoft.Office.Tools.Word.SmartTag 或 Microsoft.Office.Tools.Excel.SmartTag 類別中衍生類別。 在目標為 .NET Framework 4 的專案中,您會改為定義實作 Microsoft.Office.Tools.Word.ISmartTagExtension 或 Microsoft.Office.Tools.Excel.ISmartTagExtension 介面的類別。
如需詳細資訊,請參閱智慧標籤架構。
更新使用 GetVstoObject 和 HasVstoObject 方法的程式碼
在目標為 .NET Framework 3.5 的專案中,GetVstoObject 或 HasVstoObject 方法可做為專案中下列其中一個原生物件上的擴充方法提供:Microsoft.Office.Interop.Word.Document、Microsoft.Office.Interop.Excel.Workbook、Microsoft.Office.Interop.Excel.Worksheet 或 Microsoft.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.Document、Microsoft.Office.Interop.Excel.Workbook、Microsoft.Office.Interop.Excel.Worksheet 或 Microsoft.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 中的下列類別:
ThisDocument: Microsoft.Office.Tools.Word.Document
ThisWorkbook: Microsoft.Office.Tools.Excel.Workbook
在目標為 .NET Framework 4 的專案中,上列 Visual Studio Tools for Office Runtime 中的類型是介面,而不是類別。 在目標為 .NET Framework 4 的專案中產生的類別,是衍生自 Visual Studio Tools for Office Runtime 中的下列新類別:
ThisDocument: Microsoft.Office.Tools.Word.DocumentBase
ThisWorkbook: Microsoft.Office.Tools.Excel.WorkbookBase
如果專案中的程式碼參考其中一個產生之類別的執行個體,做為從中衍生的基底類別,則您必須修改程式碼。
例如,在目標為 .NET Framework 3.5 的 Excel 活頁簿專案中,可能會有在專案中產生之 Sheetn 類別的執行個體上執行某些工作的 Helper 方法。
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 Form 控制項的程式碼
您必須針對 Microsoft.Office.Tools.Excel 或 Microsoft.Office.Tools.Word 命名空間,將 using (C#) 或 Imports (Visual Basic) 陳述式加入至任何程式碼檔案的頂端,這類檔案會使用 Controls 屬性,以程式設計的方式將 Windows Form 控制項加入至文件或工作表。
在目標為 .NET Framework 3.5 的專案中,加入 Windows Form 控制項的方法 (例如 AddButton 方法) 是在 Microsoft.Office.Tools.Excel.ControlCollection 和 Microsoft.Office.Tools.Word.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 內容控制項事件,以及與這些事件相關聯的委派。
事件 |
.NET Framework 4 專案中使用的委派 |
---|---|
更新使用 OLEObject 和 OLEControl 類別的程式碼
在目標為 .NET Framework 3.5 的專案中,您可以使用 Microsoft.Office.Tools.Excel.OLEObject 和 Microsoft.Office.Tools.Word.OLEControl 類別將自訂控制項 (例如 Windows Form 使用者控制項) 加入至文件或工作表。
在目標為 .NET Framework 4 的專案中,這些類別已被 Microsoft.Office.Tools.Excel.ControlSite 和 Microsoft.Office.Tools.Word.ControlSite 介面取代。 您必須將參考 Microsoft.Office.Tools.Excel.OLEObject 和 Microsoft.Office.Tools.Word.OLEControl 的程式碼修改為參考 Microsoft.Office.Tools.Excel.ControlSite 和 Microsoft.Office.Tools.Word.ControlSite。 除了新名稱之外,這些控制項的行為與在目標為 .NET Framework 3.5 的專案中相同。
如需詳細資訊,請參閱在執行階段將控制項加入至 Office 文件。
更新使用 Controls.Item(Object) 屬性的程式碼
在目標為 .NET Framework 3.5 的專案中,您可以使用 Microsoft.Office.Tools.Word.Document.Controls 或 Microsoft.Office.Tools.Excel.Worksheet.Controls 集合的 Item(Object) 屬性,判斷文件或工作表是否有指定的控制項。
在目標為 .NET Framework 4 的專案中,Item(Object) 屬性已從這些集合中移除。 若要判斷文件或工作表是否包含指定的控制項,請改用 Document.Controls 或 Worksheet.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。
請參閱
概念
將 Office 方案移轉至 .NET Framework 4
在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 5 月 |
新增有關從 Excel 專案中移除 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 的章節。 |
資訊加強。 |