Aktualisieren Excel und Word-Projekten, die Sie zu .NET Framework 4.5 migrieren

Wenn Sie über ein Excel- oder Word-Projekt verfügen, das eine der folgenden Funktionen verwendet, müssen Sie den Code ändern, wenn das Zielframework in .NET Framework 4 oder höher geändert wird:

Entfernen Des ExcelLocale1033-Attributs aus Excel Projekten

Wurde Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute aus dem Teil der Visual Studio 2010 Tools for Office Runtime entfernt, der für Lösungen verwendet wird, die auf oder höher .NET Framework 4 zielen. Die Common Language Runtime (CLR) in .NET Framework 4 und höher übergibt immer die Gebietsschema-ID 1033 an das Excel-Objektmodell. Sie können dieses Attribut nicht mehr zum Deaktivieren dieses Verhaltens verwenden. Weitere Informationen finden Sie unter Globalisierung und Lokalisierung von Excel Lösungen.

So entfernen Sie das ExcelLocale1033Attribute

  1. Öffnen Sie den Projektmappen-Explorer, während das Projekt in Visual Studio geöffnet ist.

  2. Doppelklicken Sie unter dem Knoten Eigenschaften (für C#) oder dem Knoten Mein Projekt (für Visual Basic) auf die Codedatei "AssemblyInfo", um diese im Code-Editor zu öffnen.

    Hinweis

    In Visual Basic-Projekten müssen Sie im Projektmappen-Explorer auf die Schaltfläche Alle Dateien anzeigen klicken, um die Codedatei "AssemblyInfo" anzuzeigen.

  3. Suchen Sie nach Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute, und entfernen Sie das Attribut aus der Datei, oder kommentieren Sie es aus.

    <Assembly: ExcelLocale1033Proxy(True)>
    
    [assembly: ExcelLocale1033Proxy(true)]
    

Entfernen eines Verweises auf die ExcelLocal1033Proxy-Klasse

Projekte, die mithilfe von Microsoft Visual Studio 2005-Tools für Microsoft Office System erstellt wurden, instanziieren das Application-Objekt von Excel mithilfe der Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy-Klasse. Diese Klasse wurde aus dem Teil der Visual Studio 2010 Tools for Office Runtime entfernt, der für Lösungen verwendet wird, die auf oder .NET Framework 4 höher zielen. Sie müssen die Codezeilen, die auf diese Klasse verweist, daher entfernen oder auskommentieren.

So entfernen Sie den Verweis auf die ExcelLocal1033Proxy-Klasse

  1. Öffnen Sie das Projekt in Visual Studio und dann den Projektmappen-Explorer.

  2. Öffnen Projektmappen-Explorer das Kontextmenü für ThisAddin.cs (für C#) oder ThisAddin.vb (für Visual Basic), und wählen Sie dann Code anzeigen aus.

  3. Entfernen Sie im Code-Editor in der VSTO generated code -Region die folgende Codezeile, oder kommentieren Sie sie aus.

    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);
    
    

Aktualisieren von Code, der die Methoden GetVstoObject und HasVstoObject verwendet

In Projekten, die auf .NET Framework 3.5 ausgerichtet sind, sind die Methoden GetVstoObject oder HasVstoObject als Erweiterungsmethoden in einem der folgenden systemeigenen Objekte Ihres Projekts verfügbar: Document, Workbook, Worksheet oder ListObject. Wenn Sie diese Methoden aufrufen, müssen Sie keinen Parameter übergeben. Im folgenden Codebeispiel wird veranschaulicht, wie die GetVstoObject-Methode in einem Word VSTO-Add-In verwendet wird, das auf .NET Framework 3.5.

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

In Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, müssen Sie den Code für den Zugriff auf diese Methoden auf eine der folgenden Weisen ändern:

  • In den Objekten Document, Workbook, Worksheetoder ListObject können Sie weiterhin auf diese Methoden als Erweiterungsmethoden zugreifen. Allerdings müssen Sie jetzt das von der der Globals.Factory-Eigenschaft zurückgegebene Objekt an diese Methoden übergeben.

    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);
    
  • Alternativ können Sie auch in dem von der Globals.Factory-Eigenschaft zurückgegebenen Objekt auf diese Methoden zugreifen. Wenn Sie auf diese Weise auf die Methoden zugreifen, müssen Sie das systemeigene Objekt, das Sie erweitern möchten, an die Methode übergeben.

    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);
    

    Weitere Informationen finden Sie unter Erweitern von Word-Dokumenten und Excel Arbeitsmappen in VSTO-Add-Ins zur Laufzeit.

Aktualisieren von Code, der Instanzen der generierten Klassen in Projekten auf Dokumentebene verwendet

In Projekten auf Dokumentebene, die auf .NET Framework 3.5 ausgerichtet sind, werden die generierten Klassen in Projekten von den folgenden Klassen in der Visual Studio-Tools für Office-Laufzeitabgeleitet:

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn:Worksheet

  • Chartn:ChartSheet

    In Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, sind die oben unter Visual Studio-Tools für Office-Laufzeit aufgeführten Typen Schnittstellen und keine Klassen. Generierte Klassen in Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, sind von den folgenden neuen Klassen in der Visual Studio-Tools für Office-Laufzeitabgeleitet:

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn:WorksheetBase

  • Chartn:ChartSheetBase

    Wenn der Code im Projekt auf eine Instanz einer der generierten Klassen als Basisklasse verweist, von der sie abgeleitet ist, müssen Sie den Code ändern.

    In einem Excel-Arbeitsmappenprojekt, das auf .NET Framework 3.5 ausgerichtet ist, verfügen Sie z. B. möglicherweise über eine Hilfsmethode, die einen Teil der Arbeitsvorgänge für Instanzen der generierten Sheetn -Klassen im Projekt ausführt.

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.
}

Wenn Sie das Projekt neu auf .NET Framework 4 oder höher ausrichten, müssen Sie eine der folgenden Änderungen am Code vornehmen:

  • Ändern Sie den Code, durch den die DoSomethingToSheet -Methode zum Übergeben der Base -Eigenschaft eines WorksheetBase -Objekts im Projekt aufgerufen wird. Diese Eigenschaft gibt ein Worksheet -Objekt zurück.

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Ändern Sie den DoSomethingToSheet -Methodenparameter, damit er stattdessen ein WorksheetBase -Objekt erwartet.

    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.
    }
    

Aktualisieren von Code, der Windows Forms-Steuerelemente für Dokumente verwendet

Sie müssen eine using (C#)- oder Imports (Visual Basic)-Anweisung für den - oder -Namespace am Anfang einer Codedatei hinzufügen, die die Controls-Eigenschaft verwendet, um dem Dokument oder Arbeitsblatt Microsoft.Office.Tools.Excel Microsoft.Office.Tools.Word programmgesteuert Windows Forms-Steuerelemente hinzuzufügen.

In Projekten, die auf .NET Framework 3.5 ausgerichtet sind, werden die Methoden, durch die Windows Forms-Steuerelemente (z. B. die AddButton-Methode) hinzugefügt werden, in den der ControlCollection-Klasse und ControlCollection-Klasse definiert.

In Projekten, die auf oder höher zielen, sind .NET Framework 4 diese Methoden Erweiterungsmethoden, die für die Controls-Eigenschaft verfügbar sind. Um diese Erweiterungsmethoden verwenden zu können, muss die Codedatei, in der Sie die Methoden verwenden, über die Anweisung using oder Imports für den Namespace Microsoft.Office.Tools.Excel oder Microsoft.Office.Tools.Word verfügen. Diese Anweisung wird automatisch in neuen Projekten generiert, die auf .NET Framework 4 oder höher ausgerichtet sind. Allerdings wird die Anweisung in Projekten, die auf .NET Framework 3.5 ausgerichtet sind, nicht automatisch hinzugefügt. Sie müssen sie bei der Neuausrichtung des Projekts hinzufügen.

Weitere Informationen finden Sie unter Hinzufügen von Steuerelementen zu Office zur Laufzeit.

Aktualisieren von Code, der Word-Inhaltssteuerungsereignisse behandelt

In Projekten, die auf .NET Framework 3.5 ausgerichtet sind, werden diese Ereignisse vom generischen EventHandler<TEventArgs> -Delegaten behandelt. In Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, werden diese Ereignisse von anderen Delegaten behandelt.

In der folgenden Tabelle sind die Ereignisse für Inhaltssteuerelemente in Word und die Delegaten aufgeführt, die in Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, mit den Ereignissen verknüpft sind.

Ereignis Delegat für Projekte unter .NET Framework 4 und höher
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Aktualisieren von Code, der die OLEObject- und OLEControl-Klassen verwendet

In Projekten, die auf .NET Framework 3.5 ausgerichtet sind, können Sie einem Dokument oder Arbeitsblatt benutzerdefinierte Steuerelemente (z. B. Windows Forms-Steuerelemente) mithilfe der Klassen Microsoft.Office.Tools.Excel.OLEObject und Microsoft.Office.Tools.Word.OLEControl hinzufügen.

In Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, wurden diese Klassen durch die Schnittstellen ControlSite und ControlSite ersetzt. Sie müssen den Code ändern, der auf Microsoft.Office.Tools.Excel.OLEObject und Microsoft.Office.Tools.Word.OLEControl verweist, damit er stattdessen auf ControlSite und ControlSite verweist. Abgesehen von den neuen Namen verhalten sich diese Steuerelemente auf die gleiche Weise wie in Projekten, die auf .NET Framework 3.5 ausgerichtet sind.

Weitere Informationen finden Sie unter Hinzufügen von Steuerelementen zu Office zur Laufzeit.

Aktualisieren von Code, der die Controls.Item(Object)-Eigenschaft verwendet

In Projekten, die auf .NET Framework 3.5 zielen, können Sie die Item(Object)-Eigenschaft des Microsoft.Office.Tools.Word.Docverwenden. Steuerelemente oder Microsoft.Office.Tools.Excel.Worksheet.Controls Auflistung, um zu bestimmen, ob ein Dokument oder Arbeitsblatt über ein angegebenes Steuerelement verfügt.

In Projekten, die auf oder höher zielen, wurde .NET Framework 4 die Item(Object)-Eigenschaft aus diesen Auflistungen entfernt. Um zu bestimmen, ob ein Dokument oder Arbeitsblatt ein angegebenes Steuerelement enthält, verwenden Sie stattdessen die Contains(System.Object)-Methode der Controls - oder Controls -Auflistung.

Weitere Informationen zur Controls-Auflistung von Dokumenten und Arbeitsblättern finden Sie unter Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit.

Aktualisieren von Code, der Sammlungen verwendet, die von CollectionBase ableiten

In Projekten, die auf .NET Framework 3.5 zielen, werden mehrere Auflistungstypen in der von der -Klasse wie Visual Studio-Tools für Office-Laufzeit CollectionBase , und Microsoft.Office.Tools.SmartTagCollection Microsoft.Office.Tools.Excel.ControlCollection Microsoft.Office.Tools.Word.ControlCollection ableiten.

In Projekten, die auf .NET Framework 4 oder höher ausgerichtet sind, sind diese Auflistungstypen jetzt Schnittstellen, die nicht von CollectionBaseabgeleitet sind. Einige Member sind für diese Auflistungstypen nicht mehr verfügbar, z. B. Capacity, Listund InnerList.

Siehe auch