Aktualisieren von Excel- und Word-Projekten, die zu .NET Framework 4 oder .NET Framework 4.5 migriert werden
Wenn Sie ein Excel oder Word-Projekt, die eine der folgenden Funktionen verwendet, müssen Sie den Code ändern, wenn das Zielframework in .NET Framework 4 oder zu .NET Framework 4.5 geändert wird:
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 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute auch entfernen und Verweise auf Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy-Klasse aus Excel-Projekten, die auf .NET Framework 4 oder zu .NET Framework 4.5 neu zugewiesene. Visual Studio entfernt dieses Attribut nicht oder den Klassenverweis für Sie.
Entfernen von ExcelLocale1033Attribute aus Excel-Projekten
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute wurde aus dem Teil der Visual Studio 2010 Tools for Office Runtime entfernt, die für Projektmappen verwendet wird, die .NET Framework 4 oder .NET Framework 4.5 abzielen.Die CLR (Common Language Runtime) in .NET Framework 4 und in .NET Framework 4.5 übergibt immer Gebietsschema-ID 1033 an das Excel-Objektmodell, und Sie können dieses Attribut nicht mehr verwenden, um dieses Verhalten zu deaktivieren.Weitere Informationen finden Sie unter Globalisierung und Lokalisierung von Excel-Lösungen.
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.
Hinweis 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 das Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute, und entfernen sie aus der Datei, oder kommentieren Sie es aus.
<Assembly: ExcelLocale1033Proxy(True)>
[assembly: ExcelLocale1033Proxy(true)]
Entfernen eines Verweises auf ExcelLocal1033Proxy-Klasse
Projekte, die erstellt wurden, indem Sie Microsoft Visual Studio 2005-Tools für Microsoft Office System verwendete, instanziieren das Objekt Excel Microsoft.Office.Interop.Excel.Application, indem sie die Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy-Klasse verwenden.Diese Klasse ist vom zu Visual Studio 2010 Tools for Office Runtime entfernt, die für Projektmappen verwendet wird, die .NET Framework 4 oder .NET Framework 4.5 abzielen.Daher müssen Sie entfernen oder kommentieren Sie die Codezeile, die diese Klasse verweist.
Um den Verweis auf ExcelLocal1033Proxy zu entfernen Sie Klasse
Öffnen Sie das Projekt in Visual Studio, und öffnen Sie dann Projektmappen-Explorer.
In Projektmappen-Explorer öffnen Sie das Kontextmenü für ThisAddin.cs (für C#) oder ThisAddin.vb (für Visual Basic), und wählen Sie dann Code anzeigen aus.
Im Code-Editor in VSTO generated code Bereich, Entfernen oder kommentieren Sie sie aus die folgende Codezeile.
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, 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 .NET Framework 4 oder .NET Framework 4.5 abzielen, müssen Sie den Code ändern, um auf diese Methoden mit einer der folgenden Methoden 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.
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 für Office-Laufzeit abgeleitet:
ThisDocument: Microsoft.Office.Tools.Word.Document
ThisWorkbook: Microsoft.Office.Tools.Excel.Workbook
In Projekten, die .NET Framework 4 oder .NET Framework 4.5 auf abzielen, sind die Typen in Visual Studio-Tools für Office-Laufzeit, das oben aufgeführten, Schnittstellen statt Klassen.Die generierten Klassen in Projekten, die .NET Framework 4 oder .NET Framework 4.5 abzielen, werden von den folgenden neuen Klassen in Visual Studio-Tools für Office-Laufzeit:
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 Sie das Projekt in .NET Framework 4 oder zu .NET Framework 4.5 umleiten, 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 .NET Framework 4 oder .NET Framework 4.5 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 automatisch in neuen Projekten generiert, die .NET Framework 4 oder .NET Framework 4.5 abzielen.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 hierzu 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 .NET Framework 4 oder .NET Framework 4.5 abzielen, werden diese Ereignisse von anderen Delegaten behandelt.
In der folgenden Tabelle werden die Ereignisse von Word-Inhaltssteuerelementen und die Delegaten aufgeführt, die ihnen in Projekten zugeordnet sind, die .NET Framework 4 oder .NET Framework 4.5 abzielen.
Ereignis |
In .NET Framework 4 und in .NET Framework 4.5-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 .NET Framework 4 oder .NET Framework 4.5 auf abzielen, sind diese Klassen durch die Microsoft.Office.Tools.Excel.ControlSite und Microsoft.Office.Tools.Word.ControlSite-Schnittstellen 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 hierzu 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 .NET Framework 4 oder .NET Framework 4.5 abzielen, ist die Eigenschaft Item(Object) 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 für 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 .NET Framework 4 oder .NET Framework 4.5 abzielen, sind diese Auflistungstypen jetzt Schnittstellen, die nicht von CollectionBase berechnen.Einige Member sind in diesen Auflistungstypen nicht mehr verfügbar, z. B. Capacity, List und InnerList.
Siehe auch
Konzepte
Migrieren von Office-Lösungen zu .NET Framework 4 oder .NET Framework 4.5
Erweitern von Word-Dokumenten und Excel-Arbeitsmappen in Add-Ins auf Anwendungsebene zur Laufzeit
Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit