Freigeben über


Aktualisieren von Excel- und Word-Projekten, die zu .NET Framework 4 migriert werden

Wird in einem Excel- oder Word-Projekt eine der folgenden Funktionen verwendet wird, müssen Sie den Code ändern, wenn das Zielframework in .NET Framework 4 geändert wird:

  • Smarttags

  • GetVstoObject-Methode und HasVstoObject-Methode

  • Erstellte Klassen in Projekten auf Dokumentebene

  • Windows Forms-Steuerelemente in Dokumenten

  • Ereignisse von Word-Inhaltssteuerelementen

  • OLEObject-Klasse und OLEControl-Klasse

  • Controls.Item(Object)-Eigenschaft

  • Von CollectionBase abgeleitete Auflistungen

Sie müssen auch das Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute aus Excel-Projekten entfernen, denen .NET Framework 4 als Zielversion neu zugewiesen wird. Dieses Attribut wird nicht automatisch von Visual Studio entfernt.

Entfernen von ExcelLocale1033Attribute aus Excel-Projekten

Das Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute wurde aus dem Teil der Visual Studio 2010-Tools for Office-Laufzeit entfernt, der für Projektmappen mit der Zielversion .NET Framework 4 verwendet wird. Die Common Language Runtime (CLR) in .NET Framework 4 übergibt immer die Gebietsschema-ID 1033 an das Excel-Objektmodell, und Sie können dieses Verhalten nicht mehr mithilfe dieses Attributs deaktivieren. Weitere Informationen finden Sie unter Formatieren von Daten in Excel mit verschiedenen regionalen Einstellungen.

So entfernen Sie ExcelLocale1033Attribute

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

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

    Tipp

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

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

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

Aktualisieren von Code, durch den Smarttags erstellt werden

Werden in einem Excel- oder Word-Projekt Smarttags erstellt, müssen Sie die folgenden Änderungen am Code vornehmen, wenn Sie das Zielframework ändern:

  • Ändern Sie Code, in dem Smarttag- und Aktionsobjekte erstellt werden.

  • Ändern Sie Code, in dem eine Smarttagklasse mit einer benutzerdefinierten Erkennung definiert wird.

Tipp

Smarttags sind in Excel 2010 und Word 2010 veraltet. Weitere Informationen finden Sie unter Übersicht über Smarttags.

Weitere Informationen finden Sie in den nachfolgenden Anweisungen.

Erstellen von Smarttag- und Aktionsobjekten

Sie müssen im Code die Art und Weise ändern, wie Smarttag- und Aktionsobjekte erstellt werden. In Projekten, die auf .NET Framework 3.5 abzielen, sind die Smarttag- und Aktionstypen Klassen, die Sie direkt instanziieren können. In Projekten, die auf .NET Framework 4 abzielen, sind diese Typen Schnittstellen, die Sie nicht direkt instanziieren können.

Wenn das Zielframework des Projekts in .NET Framework 4 geändert wird, müssen Sie die Smarttag- und Aktionsobjekte mit Methoden erstellen, die von der Globals.Factory-Eigenschaft im Projekt bereitgestellt werden. Weitere Informationen finden Sie unter Smarttagarchitektur.

In der folgenden Tabelle sind die Smarttag- und Aktionstypen und die Methode aufgeführt, mit der Instanzen der Typen in Projekten erstellt werden sollen, die auf .NET Framework 4 abzielen.

Smarttag- und Aktionstyp

In .NET Framework 4-Projekten zu verwendende Factorymethode

Microsoft.Office.Tools.Excel.Action

CreateAction-Methode der Microsoft.Office.Tools.Excel.Factory-Klasse

Microsoft.Office.Tools.Excel.SmartTag

CreateSmartTag-Methode der Microsoft.Office.Tools.Excel.Factory-Klasse

Microsoft.Office.Tools.Word.Action

CreateAction-Methode der Microsoft.Office.Tools.Word.Factory-Klasse

Microsoft.Office.Tools.Word.SmartTag

CreateSmartTag-Methode der Microsoft.Office.Tools.Word.Factory-Klasse

Definieren von Smarttagklassen mit benutzerdefinierten Erkennungen

Sie müssen den Code ändern, wenn Sie eine eigene Smarttagklasse mit einer benutzerdefinierten Erkennung definieren. In Projekten, die auf .NET Framework 3.5 abzielen, leiten Sie die Klasse von der Microsoft.Office.Tools.Word.SmartTag-Klasse oder Microsoft.Office.Tools.Excel.SmartTag-Klasse ab. In Projekten, die auf .NET Framework 4 abzielen, definieren Sie stattdessen eine Klasse, die die Microsoft.Office.Tools.Word.ISmartTagExtension-Schnittstelle oder Microsoft.Office.Tools.Excel.ISmartTagExtension-Schnittstelle implementiert.

Weitere Informationen finden Sie unter Smarttagarchitektur.

Aktualisieren von Code, in dem die GetVstoObject- und HasVstoObject-Methoden verwendet werden

In Projekten, die auf .NET Framework 3.5 abzielen, sind die GetVstoObject-Methode oder HasVstoObject-Methode als Erweiterungsmethoden in einem der folgenden systemeigenen Objekte im Projekt verfügbar: Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet oder Microsoft.Office.Interop.Excel.ListObject. Wenn Sie diese Methoden aufrufen, müssen Sie keinen Parameter übergeben. Im folgenden Codebeispiel wird gezeigt, wie die GetVstoObject-Methode in einem Word-Add-In verwendet wird, das auf .NET Framework 3.5 abzielt.

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 abzielen, müssen Sie den Code ändern, um auf diese Methoden mit einer der folgenden Möglichkeiten zuzugreifen:

  • Sie können weiterhin auf diese Methoden als Erweiterungsmethoden in den Objekten Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet oder Microsoft.Office.Interop.Excel.ListObject zugreifen. Sie müssen jetzt jedoch das von 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 auf diese Methoden in dem Objekt zugreifen, das von der Globals.Factory-Eigenschaft zurückgegeben wird. Wenn Sie auf diese Weise auf die Methoden zugreifen, müssen Sie das systemeigene Objekt, das erweitert werden soll, 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 Add-Ins auf Anwendungsebene zur Laufzeit und Abrufen von erweiterten Objekten aus systemeigenen Office-Objekten in Anpassungen auf Dokumentebene.

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

In Projekten auf Dokumentebene, die auf .NET Framework 3.5 abzielen, werden die erstellten Klassen in den Projekten von den folgenden Klassen in Visual Studio Tools for Office-Laufzeit abgeleitet:

In Projekten, die auf .NET Framework 4 abzielen, sind die oben aufgeführten Typen in Visual Studio Tools for Office-Laufzeit Schnittstellen statt Klassen. Die erstellten Klassen in Projekten, die auf .NET Framework 4 abzielen, werden von den folgenden neuen Klassen in Visual Studio Tools for Office-Laufzeit abgeleitet:

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

In einem Excel-Arbeitsmappenprojekt, das auf .NET Framework 3.5 abzielt, verfügen Sie z. B. möglicherweise über eine Hilfsmethode, die Instanzen der erstellten Sheetn-Klassen im Projekt verarbeitet.

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 für das Projekt eine erneute Zielzuweisung auf .NET Framework 4 erfolgt, müssen Sie eine der folgenden Änderungen am Code vornehmen:

  • Ändern Sie Code, in dem die DoSomethingToSheet-Methode aufgerufen wird, um die Base-Eigenschaft eines Microsoft.Office.Tools.Excel.WorksheetBase-Objekts im Projekt zu übergeben. Diese Eigenschaft gibt ein Microsoft.Office.Tools.Excel.Worksheet-Objekt zurück.

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Ändern Sie den DoSomethingToSheet-Methodenparameter, um stattdessen ein Microsoft.Office.Tools.Excel.WorksheetBase-Objekt zu erwarten.

    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, in dem Windows Forms-Steuerelemente für Dokumente verwendet werden

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

In Projekten, die auf .NET Framework 3.5 abzielen, werden die Methoden, die Windows Forms-Steuerelemente hinzufügen (z. B. die AddButton-Methode), in der Microsoft.Office.Tools.Excel.ControlCollection-Klasse und Microsoft.Office.Tools.Word.ControlCollection-Klasse definiert.

In Projekten, die auf .NET Framework 4 abzielen, sind diese Methoden Erweiterungsmethoden, die in der Controls-Eigenschaft verfügbar sind. Damit diese Erweiterungsmethoden in der Codedatei verwendet werden können, muss diese über eine using-Anweisung oder Imports-Anweisung für den Microsoft.Office.Tools.Excel-Namespace oder Microsoft.Office.Tools.Word-Namespace verfügen. Diese Anweisung wird in neuen Projekten, die auf .NET Framework 4 abzielen, automatisch generiert. Diese Anweisung wird jedoch nicht automatisch in Projekten hinzugefügt, die auf .NET Framework 3.5 abzielen, daher müssen Sie sie bei der erneuten Zielzuweisung für das Projekt hinzufügen.

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

Aktualisieren von Code, der Word-Inhaltssteuerelementereignisse behandelt

In Projekten, die auf .NET Framework 3.5 abzielen, werden Ereignisse von Word-Inhaltssteuerelementen vom generischen EventHandler<TEventArgs>-Delegaten behandelt. In Projekten, die auf .NET Framework 4 abzielen, werden diese Ereignisse von anderen Delegaten behandelt.

In der folgenden Tabelle sind die Ereignisse von Word-Inhaltssteuerelementen und die Delegaten aufgeführt, die ihnen in Projekten zugeordnet sind, die auf .NET Framework 4 abzielen.

Ereignis

In .NET Framework 4-Projekten zu verwendender Delegat

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

Aktualisieren von Code, in dem die OLEObject- und OLEControl-Klassen verwendet werden

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

In Projekten, die auf .NET Framework 4 abzielen, wurden diese Klassen durch die Microsoft.Office.Tools.Excel.ControlSite-Schnittstelle und Microsoft.Office.Tools.Word.ControlSite-Schnittstelle ersetzt. Sie müssen Code ändern, der auf Microsoft.Office.Tools.Excel.OLEObject und Microsoft.Office.Tools.Word.OLEControl verweist, um stattdessen auf Microsoft.Office.Tools.Excel.ControlSite und Microsoft.Office.Tools.Word.ControlSite zu verweisen. Im Gegensatz zu den neuen Namen weisen diese Steuerelemente dasselbe Verhalten wie in Projekten auf, die auf .NET Framework 3.5 abzielen.

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

Aktualisieren von Code, in dem die Controls.Item(Object)-Eigenschaft verwendet wird

In Projekten, die auf .NET Framework 3.5 abzielen, können Sie mithilfe der Item(Object)-Eigenschaft der Microsoft.Office.Tools.Word.Document.Controls-Auflistung oder Microsoft.Office.Tools.Excel.Worksheet.Controls-Auflistung bestimmen, ob ein Dokument oder ein Arbeitsblatt über ein angegebenes Steuerelement verfügt.

In Projekten, die auf .NET Framework 4 abzielen, wurde die Item(Object)-Eigenschaft aus diesen Auflistungen entfernt. Verwenden Sie zum Feststellen, ob ein Dokument oder ein Arbeitsblatt ein angegebenes Steuerelement enthält, stattdessen die Contains(System.Object)-Methode der Document.Controls-Auflistung oder Worksheet.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, in dem von CollectionBase abgeleitete Auflistungen verwendet werden

In Projekten mit der Zielversion .NET Framework 3.5 werden mehrere Auflistungstypen in der Visual Studio Tools for Office-Laufzeit von der CollectionBase-Klasse abgeleitet, z. B. Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollection und Microsoft.Office.Tools.Word.ControlCollection.

In Projekten, die auf .NET Framework 4 abzielen, sind diese Auflistungstypen jetzt Schnittstellen, die nicht von CollectionBase abgeleitet werden. Einige Member sind in diesen Auflistungstypen nicht mehr verfügbar, z. B. Capacity, List und InnerList.

Siehe auch

Konzepte

Smarttagarchitektur

Inhaltssteuerelemente

Erweitern von Word-Dokumenten und Excel-Arbeitsmappen in Add-Ins auf Anwendungsebene zur Laufzeit

Abrufen von erweiterten Objekten aus systemeigenen Office-Objekten in Anpassungen auf Dokumentebene

Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit

Globaler Zugriff auf Objekte in Office-Projekten

Weitere Ressourcen

Migrieren von Office-Lösungen zu .NET Framework 4

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Es wurde ein Abschnitt zum Entfernen von Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute aus Excel-Projekten hinzugefügt.

Informationsergänzung.