Actualizar proyectos de Excel y Word que se migran a .NET Framework 4.5

Si tiene un proyecto de Excel o Word que usa cualquiera de las siguientes características, debe modificar el código si se cambia la plataforma de destino a .NET Framework 4 o posterior:

Quitar el atributo ExcelLocale1033 de proyectos de Excel

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute Se ha quitado de la parte del entorno de ejecución de Visual Studio 2010 Tools para Office que se usa para las soluciones destinadas a .NET Framework 4 o posterior. Common Language Runtime (CLR) en .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 de Excel.

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.

    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 .

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

    [assembly: ExcelLocale1033Proxy(true)]
    

Quitar 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 del entorno de ejecución de Visual Studio 2010 Tools para Office que se usa para las soluciones destinadas a .NET Framework 4 o posterior. 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 Explorador de soluciones, abra el menú contextual de ThisAddin.cs (para C#) o ThisAddin.vb (para 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.

    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    
    

Actualizar código que usa los métodos GetVstoObject y HasVstoObject

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 tienen como destino .NET Framework 4 o posterior, debe modificar el código para acceder a estos métodos de una de las maneras siguientes:

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

    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.

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

    Para obtener más información, vea Extender documentos de Word y libros de Excel en complementos de VSTO en tiempo de ejecución.

Actualizar código que usa instancias de las clases generadas en proyectos de nivel de documento

En los proyectos de nivel de documento que tienen como destino .NET Framework 3.5, las clases generadas en los proyectos derivan de las siguientes clases en el entorno de ejecución de Visual Studio Tools para Office :

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn: Worksheet

  • Chartn: ChartSheet

    En los proyectos que tienen como destino .NET Framework 4 o posterior, los tipos del entorno de ejecución de Visual Studio Tools para Office enumerados anteriormente son interfaces, en lugar de clases. Las clases generadas en proyectos que tienen como destino .NET Framework 4 o posterior derivan de las siguientes clases nuevas en el entorno de ejecución de Visual Studio Tools para Office :

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn: WorksheetBase

  • Chartn: ChartSheetBase

    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 del asistente 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 asignar el proyecto a .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 .

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modificar el parámetro de método DoSomethingToSheet para que, en su lugar, espere un objeto WorksheetBase .

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

Actualizar código que usa controles de Windows Forms en documentos

Debe agregar una instrucción using (C#) o Imports (Visual Basic) para el Microsoft.Office.Tools.Excel espacio de nombres 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 o 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 nuevos proyectos que tienen 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, vea Agregar controles a documentos de Office en tiempo de ejecución.

Actualizar 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 proyectos que tienen como destino .NET Framework 4 o posterior, otros delegados controlan estos eventos.

En la tabla siguiente se enumeran los eventos de control de contenido de Word y los delegados asociados a ellos en proyectos que tienen como destino .NET Framework 4 o posterior.

Evento Delegado para usarlo en proyectos de .NET Framework 4 y versiones posteriores
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Actualizar 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 tienen como destino .NET Framework 4 o posterior, estas clases se han reemplazado por las ControlSite interfaces 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, vea Agregar controles a documentos de Office en tiempo de ejecución.

Actualizar 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 Microsoft.Office.Tools.Excel.Worksheet.Controls la colección para determinar si un documento o 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 Controls colección o Controls en su lugar.

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

Actualizar código que usa colecciones que derivan de CollectionBase

En los proyectos que tienen como destino .NET Framework 3.5, varios tipos de colección del entorno de ejecución de Visual Studio Tools para Office derivan de la CollectionBase clase , como Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollectiony Microsoft.Office.Tools.Word.ControlCollection.

En los proyectos que tienen como destino .NET Framework 4 o posterior, estos tipos de colección ahora son interfaces que no derivan de CollectionBase. Algunos miembros ya no están disponibles en estos tipos de colección, como Capacity, Listy InnerList.