Actualización de proyectos de Excel y Word que se migran a .NET Framework 4.5
Si tiene un proyecto de Word o Excel que use cualquiera de las siguientes características, debe modificar el código si se cambia el marco de trabajo de destino a .NET Framework 4 o una versión posterior:
Colecciones que derivan de CollectionBase
También debe quitar
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
y las referencias a la claseMicrosoft.Office.Tools.Excel.ExcelLocale1033Proxy
de los proyectos de Excel que se vuelven a destinar a .NET Framework 4 o posterior. Visual Studio no quita por usted este atributo ni la referencia a la clase.
Eliminación del atributo ExcelLocale1033 de proyectos de Excel
El Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
se ha quitado de la parte de Visual Studio 2010 Tools para Office Runtime que se usa para soluciones cuyo destino es .NET Framework 4 o versiones posteriores. El Common Language Runtime (CLR) de .NET Framework 4 y versiones posteriores siempre pasa el identificador de configuración regional 1033 al modelo de objetos de Excel y ya no puede usar este atributo para deshabilitar este comportamiento. Para obtener más información, consulte Globalización y localización de soluciones Excel.
Para quitar el ExcelLocale1033Attribute
Con el proyecto abierto en Visual Studio, abra el Explorador de soluciones.
En el nodo Propiedades (en C#) o Mi proyecto (en Visual Basic), haga doble clic en el archivo de código AssemblyInfo para abrirlo en el editor de código.
Nota:
Para ver el archivo de código AssemblyInfo en los proyectos de Visual Basic, haga clic en el botón Mostrar todos los archivos del Explorador de soluciones .
Busque
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
y quítelo del archivo o márquelo como comentario.
Eliminación de una referencia a la clase ExcelLocal1033Proxy
Los proyectos que se crearon con Microsoft Visual Studio 2005 Tools para Microsoft Office System crean una instancia del objeto Application de Excel mediante el uso de la clase Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy
. Esta clase se ha quitado de la parte de Visual Studio 2010 Tools para Office Runtime que se usa para soluciones cuyo destino es .NET Framework 4 o versiones posteriores. Por lo tanto, debe quitar la línea de código que hace referencia a esta clase o marcarla como comentario.
Para quitar la referencia a la clase ExcelLocal1033Proxy
Abra el proyecto en Visual Studio y, a continuación, abra el Explorador de soluciones.
En el Explorador de soluciones, abra el menú contextual para ThisAddin.cs (en C#) o ThisAddin.vb (en Visual Basic) y, a continuación, elija Ver código.
En el Editor de código, en la región
VSTO generated code
, quite o marque como comentario la siguiente línea de código.
Actualización del código que usa los métodos HasVstoObject y GetVstoObject
En los proyectos que tienen como destino .NET Framework 3.5, los métodos GetVstoObject
o HasVstoObject
están disponibles como métodos de extensión en uno de los siguientes objetos nativos del proyecto: Document, Workbook, Worksheet o ListObject. Al llamar a estos métodos, no es necesario pasar un parámetro. En el ejemplo de código siguiente se muestra cómo usar el método GetVstoObject en un complemento de VSTO de Word destinado a .NET Framework 3.5.
Microsoft.Office.Tools.Word.Document vstoDocument =
Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();
En los proyectos que tengan como destino .NET Framework 4 o posterior, debe modificar el código para acceder a estos métodos de una de las siguientes maneras:
Seguirá pudiendo acceder a estos métodos como métodos de extensión en objetos Document, Workbook, Worksheeto ListObject . Sin embargo, ahora debe pasar el objeto devuelto por la propiedad
Globals.Factory
a estos métodos.También puede acceder a estos métodos en el objeto devuelto por la propiedad
Globals.Factory
. Si accede a estos métodos de esta manera, debe pasar el objeto nativo que desee extender al método.Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
Para obtener más información, consulte Extensión de documentos de Word y libros de Excel en complementos VSTO en tiempo de ejecución.
Actualización de código que usa instancias de las clases generadas en proyectos de nivel de documento
En los proyectos de nivel de documento que tengan como destino .NET Framework 3.5, las clases generadas en los proyectos se derivan de las siguientes clases en el Runtime de Microsoft Visual Studio Tools para Office:
ThisDocument
: DocumentThisWorkbook
: WorkbookSheet
n: WorksheetChart
n: ChartSheetEn los proyectos destinados a .NET Framework 4 o posterior, los tipos del Runtime de Microsoft Visual Studio Tools para Office enumerados anteriormente son interfaces, en lugar de clases. Las clases generadas en proyectos que tengan como destino .NET Framework 4 o posterior se derivan de las siguientes clases nuevas en el Runtime de Microsoft Visual Studio Tools para Office:
ThisDocument
: DocumentBaseThisWorkbook
: WorkbookBaseSheet
n: WorksheetBaseChart
n: ChartSheetBaseSi el código del proyecto hace referencia a una instancia de una de las clases generadas como la clase base de la que se deriva, debe modificar el código.
Por ejemplo, en un proyecto de libro de Excel que tenga como destino .NET Framework 3.5, podría tener un método del asistente que realizase algún trabajo en las instancias de las clases
Sheet
n generadas en su proyecto.
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
// Do something to the worksheet object.
}
Si vuelve a establecer el destino del proyecto en .NET Framework 4 o posterior, debe realizar uno de los siguientes cambios en el código:
Modificar cualquier código que llame al método
DoSomethingToSheet
para pasar la propiedad Base de un objeto WorksheetBase de su proyecto. Esta propiedad devuelve un objeto Worksheet .Modificar el parámetro de método
DoSomethingToSheet
para que, en su lugar, espere un objeto WorksheetBase .
Actualización del código que usa controles de Windows Forms en documentos
Debe agregar una instrucción using (C#) o Imports (Visual Basic) para el espacio de nombres Microsoft.Office.Tools.Excel o Microsoft.Office.Tools.Word en la parte superior de cualquier archivo de código que use la propiedad Controls para agregar controles de Windows Forms al documento u hoja de cálculo mediante programación.
En proyectos que tengan como destino .NET Framework 3.5, los métodos que agregan controles de Windows Forms (como el método AddButton
) se definen en las clases ControlCollection y ControlCollection.
En los proyectos que tienen como destino .NET Framework 4 o posterior, estos métodos son métodos de extensión que están disponibles en la propiedad Controls. Para usar estos métodos de extensión, el archivo de código en el que usa los métodos debe tener una instrucción using o Imports para el espacio de nombres Microsoft.Office.Tools.Excel o Microsoft.Office.Tools.Word . Esta instrucción se genera automáticamente en los nuevos proyectos que tengan como destino .NET Framework 4 o posterior. Sin embargo, esta instrucción no se agrega automáticamente en los proyectos que tienen como destino la versión .NET Framework 3.5, por lo que debe agregarla al cambiar el destino del proyecto.
Para obtener más información, consulte Agregar controles a documentos de Office en tiempo de ejecución.
Actualización del código que controla los eventos de control de contenido de Word
En los proyectos que tengan como destino .NET Framework 3.5, el delegado EventHandler<TEventArgs> genérico controla los eventos de los controles de contenido de Word. En los proyectos que tengan como destino .NET Framework 4 o posterior, otros delegados controlan estos eventos.
En la siguiente tabla se enumeran los eventos de control de contenido de Word y los delegados asociados a ellos en proyectos que tengan como destino .NET Framework 4 o posterior.
Evento | Delegado que se usará en proyectos de .NET Framework 4 y posterior |
---|---|
Added | ContentControlAddedEventHandler |
ContentUpdating | ContentControlContentUpdatingEventHandler |
Deleting | ContentControlDeletingEventHandler |
Entering | ContentControlEnteringEventHandler |
Exiting | ContentControlExitingEventHandler |
StoreUpdating | ContentControlStoreUpdatingEventHandler |
Actualización del código que usa las clases OLEObject y OLEControl
En los proyectos que tengan como destino .NET Framework 3.5, puede agregar controles personalizados (como controles de usuario de Windows Forms) a un documento o una hoja de cálculo mediante el uso de las clases Microsoft.Office.Tools.Excel.OLEObject
y Microsoft.Office.Tools.Word.OLEControl
.
En los proyectos que tengan como destino .NET Framework 4 o posterior, estas clases se han reemplazado por las interfaces ControlSite y ControlSite. Debe modificar el código que hace referencia a Microsoft.Office.Tools.Excel.OLEObject
y Microsoft.Office.Tools.Word.OLEControl
para que en su lugar haga referencia a ControlSite y ControlSite. Salvo los nuevos nombres, estos controles se comportan de la misma manera que lo hacen en los proyectos que tienen como destino .NET Framework 3.5.
Para obtener más información, consulte Agregar controles a documentos de Office en tiempo de ejecución.
Actualización del código que usa la propiedad Controls.Item(Object)
En los proyectos que tienen como destino .NET Framework 3.5, puede usar la propiedad Item(Object) de Microsoft.Office.Tools.Word.Document.Controls o la colección Microsoft.Office.Tools.Excel.Worksheet.Controls
para determinar si un documento u hoja de cálculo tiene un control especificado.
En los proyectos que tienen como destino .NET Framework 4 o posterior, la propiedad Item(Object) se ha quitado de estas colecciones. Para determinar si un documento o una hoja de cálculo contiene un control especificado, use el método Contains(System.Object) de la colección Controls o Controls en su lugar.
Para obtener más información sobre la colección Controls de documentos y hojas de cálculo, consulte Adición de controles a documentos de Office en tiempo de ejecución.
Actualización del código que usa colecciones derivadas de CollectionBase
En los proyectos que tienen como destino .NET Framework 3.5, varios tipos de colección del Runtime de Microsoft Visual Studio Tools para Office se derivan de la clase CollectionBase, como Microsoft.Office.Tools.SmartTagCollection
, Microsoft.Office.Tools.Excel.ControlCollection
y Microsoft.Office.Tools.Word.ControlCollection
.
Ahora, en los proyectos que tienen como destino .NET Framework 4 o posterior, estos tipos de colección son interfaces que no se derivan de CollectionBase. Algunos miembros ya no están disponibles en estos tipos de colección, como Capacity, Listy InnerList.