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
Öffnen Sie das Projekt in Visual Studio, und öffnen Sie den Projektmappen-Explorer.
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.
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 |
---|---|
CreateAction-Methode der Microsoft.Office.Tools.Excel.Factory-Klasse |
|
CreateSmartTag-Methode der Microsoft.Office.Tools.Excel.Factory-Klasse |
|
CreateAction-Methode der Microsoft.Office.Tools.Word.Factory-Klasse |
|
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:
ThisDocument: Microsoft.Office.Tools.Word.Document
ThisWorkbook: Microsoft.Office.Tools.Excel.Workbook
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:
ThisDocument: Microsoft.Office.Tools.Word.DocumentBase
ThisWorkbook: Microsoft.Office.Tools.Excel.WorkbookBase
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 |
---|---|
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
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. |