共用方式為


更新移轉到 .NET Framework 4.5 的 Excel 和 Word 專案

如果您有使用下列任何功能的 Excel 或 Word 專案,當目標 Framework 變更為 .NET Framework 4 或更新版本時,即必須修改程式碼:

從 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

  1. 請使用在 Visual Studio 中開啟的專案,開啟 [方案總管]

  2. 在 [屬性] 節點 (C#) 或 [我的專案] 節點 (Visual Basic) 下,按兩下 AssemblyInfo 程式碼檔,以在程式碼編輯器中加以開啟。

    注意

    在 Visual Basic 專案中,您必須按一下 [方案總管] 中的 [顯示所有檔案] 按鈕,才能查看 AssemblyInfo 程式碼檔。

  3. 找出 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute,並將它從檔案移除或加上註解。

    [assembly: ExcelLocale1033Proxy(true)]
    

移除 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 類別的參考

  1. 請在 Visual Studio 中開啟專案,再開啟 [方案總管]

  2. [方案總管] 中,開啟 ThisAddin.cs (C#) 或 ThisAddin.vb (Visual Basic) 的捷徑功能表,然後選擇 [檢視程式碼]

  3. 在程式碼編輯器的 VSTO generated code 區域中,移除或註解化下列程式碼行。

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

更新使用 GetVstoObject 和 HasVstoObject 方法的程式碼

在以 .NET Framework 3.5 為目標的專案中,GetVstoObjectHasVstoObject 方法在專案下列其中一個原生物件上可用為擴充方法:DocumentWorkbookWorksheetListObject。 當您呼叫這些方法時,不需要傳遞參數。 以下程式碼範例示範如何在針對 .NET Framework 3.5 的 Word VSTO 增益集中使用 GetVstoObject 方法。

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

在面向 .NET Framework 4 或更新版本的專案中,您必須修改程式碼,以下列方式之一存取這些方法:

  • 您仍然可以在後列物件上存取這些方法當成擴充方法: DocumentWorkbookWorksheetListObject 物件。 不過,您現在必須將 Globals.Factory 屬性傳回的物件傳遞給這些方法。

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(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: Worksheet

  • Chart n: ChartSheet

    在面向 .NET Framework 4 或更新版本的專案中,上方所列 Visual Studio Tools for Office Runtime 中的類別都是介面,而不是類別。 在面向 .NET Framework 4 或更新版本的專案中產生的類別,其衍生自 Visual Studio Tools for Office Runtime 中的下列新類別:

  • %

  • %

  • Sheet n: WorksheetBase

  • Chart n: ChartSheetBase

    如果專案中的程式碼將參考的其中一個產生的類別執行個體,視為其衍生來源的基底類別,您必須修改程式碼。

    例如,在以 .NET Framework 3.5 為目標的 Excel 活頁簿專案中,您可能有個 helper 方法,會對專案中之產生的 Sheetn 類別執行個體執行一些工作。

private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

如果專案重定目標為 .NET Framework 4 或更新版本,您必須對程式碼進行下列一種變更:

  • 修改專案中呼叫 DoSomethingToSheet 方法以傳遞 Base 物件之 WorksheetBase 屬性的所有程式碼。 這個屬性會傳回 Worksheet 物件。

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • 修改 DoSomethingToSheet 方法參數,預期會改為 WorksheetBase 物件。

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

更新在文件上使用 Windows Form 控制項的程式碼

您必須將 Microsoft.Office.Tools.ExcelMicrosoft.Office.Tools.Word 命名空間的 using (C#) 或 Imports (Visual Basic) 陳述式新增至使用 Controls 屬性,以程式設計方式將 Windows 窗體控制項新增至文件或工作表的任何程式碼檔案的頂端。

在以 .NET Framework 3.5 為目標的專案中,加入 Windows Form 控制項的方法(例如 AddButton 方法),都是在 ControlCollectionControlCollection 類別中所定義。

在面向 .NET Framework 4 或更新版本的專案中,這些方法是 Controls 屬性上可用的擴充方法。 若要使用這些擴充方法,使用這些方法的程式碼檔案必須具有 Microsoft.Office.Tools.ExcelMicrosoft.Office.Tools.Word 命名空間的 usingImports 陳述式。 以 .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 及更新版本的專案中要使用的委派
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 Form 使用者控制項) 加入文件或工作表。

在面向 .NET Framework 4 或更新版本的專案中,ControlSiteControlSite 介面已取代這些類別。 您必須修改原參考 Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl 的程式碼,改為參考 ControlSiteControlSite。 除了新名稱以外,這些控制項的行為方式和它們在以 .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.SmartTagCollectionMicrosoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection

在面向 .NET Framework 4 或更新版本的專案中,這些集合類型現在不是從 CollectionBase 衍生的介面。 這些集合類型也不再提供某些成員,例如 CapacityListInnerList