Compartir a través de


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:

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

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

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

  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.

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

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.

    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, 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: Document

  • ThisWorkbook: Workbook

  • Sheet n: Worksheet

  • Chart n: ChartSheet

    En 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: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheet n: WorksheetBase

  • Chart n: 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 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 .

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

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.