Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Actualizar proyectos de Excel y Word para migrarlos a .NET Framework 4 o .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:

También debe quitar la Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute y las referencias a la clase Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy de los proyectos de Excel cuyo destino se restablezca en la versión .NET Framework 4 o posterior. Visual Studio no quita por usted este atributo ni la referencia a la clase.

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 una versión posterior. 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, véase Novedades en el SDK Visual Studio 2015.

Para quitar el ExcelLocale1033Attribute

  1. Con el proyecto abierto en Visual Studio, abra el Explorador de soluciones.

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

    System_CAPS_noteNota

    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.

  3. Encuentre Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute y quítelo del archivo o márquelo como comentario.

    <Assembly: ExcelLocale1033Proxy(True)>
    

    [assembly: ExcelLocale1033Proxy(true)]
    

Los proyectos que se crearon con Microsoft Visual Studio 2005 Tools para Microsoft Office System crean una instancia del objeto Microsoft.Office.Interop.Excel.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

  1. Abra el proyecto en Visual Studio y, a continuación, abra el Explorador de soluciones.

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

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

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

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: Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet o Microsoft.Office.Interop.Excel.ListObject. Al llamar a estos métodos, no es necesario pasar un parámetro. En el siguiente ejemplo de código se muestra cómo usar el método GetVstoObject en un complemento VSTO de Word que tenga como destino .NET Framework 3.5.

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

En los proyectos que tengan como destino la versión .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 Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet o Microsoft.Office.Interop.Excel.ListObject. Sin embargo, ahora debe pasar el objeto devuelto por la propiedad Globals.Factory a estos métodos.

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

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

Para obtener más información, véase ¿Cómo se puede ejecutar el código del complemento en un VSPackage?

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:

En los proyectos que tienen como destino .NET Framework 4 o versiones posteriores, los tipos en 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 la versión .NET Framework 4 o posterior derivan de las siguientes clases nuevas en Runtime de Microsoft Visual Studio Tools para Office:

Si 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 auxiliar que realizase algún trabajo en las instancias de las clases Sheetn 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 una versión posterior, debe realizar uno de los siguientes cambios en el código:

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 a 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 Microsoft.Office.Tools.Excel.ControlCollection y Microsoft.Office.Tools.Word.ControlCollection.

En los proyectos que tienen como destino .NET Framework 4 o una versión 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 una versión 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, véase ¿Cómo se puede ejecutar el código del complemento en un VSPackage?

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 una versión 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 la versión .NET Framework 4 o posterior.

Event

Delegado a usar en proyectos de la versión .NET Framework 4 y posterior

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

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 la versión .NET Framework 4 o posterior, estas clases se han reemplazado por las interfaces Microsoft.Office.Tools.Excel.ControlSite y Microsoft.Office.Tools.Word.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 Microsoft.Office.Tools.Excel.ControlSite y Microsoft.Office.Tools.Word.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, véase ¿Cómo se puede ejecutar el código del complemento en un VSPackage?

En los proyectos que tengan como destino .NET Framework 3.5, puede usar la propiedad Item(Object) de la colección Microsoft.Office.Tools.Word.Document.Controls o Microsoft.Office.Tools.Excel.Worksheet.Controls para determinar si un documento o una hoja de cálculo tiene un control especificado.

En los proyectos que tienen como destino .NET Framework 4 o una versión 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 Document.Controls o Worksheet.Controls en su lugar.

Para obtener más información acerca de la colección Controls de documentos y hojas de cálculo, consulte Agregar controles a documentos de Office en tiempo de ejecución.

En los proyectos que tengan como destino .NET Framework 3.5, varios tipos de colección del Runtime de Microsoft Visual Studio Tools para Office 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 la versión .NET Framework 4 o una versión 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, List y InnerList.

Mostrar: