Compartir a través de


Actualizar proyectos de Excel y Word para migrarlos a .NET Framework 4 o .NET Framework 4.5

Si tiene un proyecto de excel o word en el que usa cualquiera de las características, debe modificar el código si el marco de destino se cambia .NET Framework 4 o a .NET Framework 4.5:

  • Métodos GetVstoObject y HasVstoObject

  • Clases generadas en proyectos de nivel de documento

  • Controles de Windows Forms en documentos

  • Eventos de los controles de contenido de Word

  • Clases OLEObject y OLEControl

  • Propiedad Controls.Item(Object)

  • Colecciones que derivan de CollectionBase

También debe quitar Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute y las referencias a la clase de Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy de los proyectos de excel redestinados a .NET Framework 4 o a .NET Framework 4.5. Visual Studio no quita este atributo o la referencia de la clase.

Quitar ExcelLocale1033Attribute de los proyectos de Excel

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute se ha quitado de la parte de Visual Studio 2010 Tools para Office Runtime que se utiliza para soluciones destinadas .NET Framework 4 o .NET Framework 4.5.Common Language Runtime (CLR) en .NET Framework 4 y .NET Framework 4.5 siempre pasa el identificador de configuración regional 1033 al modelo de objetos de Excel, y puede utilizar ya no este atributo para deshabilitar este comportamiento.Para obtener más información, vea Globalización y localización de las soluciones de Excel.

Para quitar ExcelLocale1033Attribute

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

  2. Bajo el nodo Propiedades (para C#) o el nodo Mi proyecto (para Visual Basic), haga doble clic en el archivo de código AssemblyInfo de modo que se abra 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 el atributo Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute y quítelo del archivo o márquelo como comentario.

    <Assembly: ExcelLocale1033Proxy(True)>
    
    [assembly: ExcelLocale1033Proxy(true)]
    

Quitar una referencia a la clase de ExcelLocal1033Proxy

Proyectos creados mediante Microsoft Visual Studio 2005 Tools for the Microsoft Office System crean instancias del objeto de Excel Microsoft.Office.Interop.Excel.Application mediante la clase de Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Esta clase se ha quitado de la parte de Visual Studio 2010 Tools para Office Runtime que se utiliza para soluciones destinadas .NET Framework 4 o .NET Framework 4.5.Por lo tanto, debe quitar o marcar como comentario la línea de código que haga referencia a esta clase.

Para quitar la referencia a la clase de ExcelLocal1033Proxy

  1. Abra el proyecto en Visual Studio, y abra Explorador de soluciones.

  2. En Explorador de soluciones, abra el menú contextual para ThisAddin.cs (para C#) o ThisAddin.vb (para Visual Basic) y, a continuación ver código.

  3. En el editor de código, en la región de 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);
    

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

En proyectos destinados a .NET Framework 3.5, los métodos HasVstoObject y GetVstoObject 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 necesita pasar ningún parámetro.En el siguiente ejemplo de código, se muestra cómo utilizar el método GetVstoObject en un complemento de Word destinado a .NET Framework 3.5.

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

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, debe modificar el código para obtener acceso a estos métodos en una de las siguientes maneras:

  • Puede seguir obteniendo acceso a estos métodos como métodos de extensión en los objetos Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.ListObject o Microsoft.Office.Interop.Excel.Worksheet.Sin embargo, deberá pasar a estos métodos el objeto devuelto por la propiedad Globals.Factory.

    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);
    
  • Asimismo, puede obtener acceso a estos métodos en el objeto devuelto por la propiedad Globals.Factory.En este caso, deberá pasar al método el objeto nativo que desee extender.

    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, vea Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución.

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

En proyectos de nivel de documento destinados a .NET Framework 3.5, las clases generadas en los proyectos se derivan de las siguientes clases del Runtime de Microsoft Visual Studio Tools para Office:

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, los tipos de Runtime de Microsoft Visual Studio Tools para Office enumerado anteriormente son interfaces, en lugar de clases.Las clases generadas en proyectos destinados .NET Framework 4 o .NET Framework 4.5 deriva de las siguientes clases nuevas de 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 clase base de la que se deriva, deberá modificar el código.

Por ejemplo, en un proyecto de libro de Excel destinado a .NET Framework 3.5, puede haber un método auxiliar que use instancias de las clases Sheetn generadas en el proyecto.

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

Si cambia el destino del proyecto a .NET Framework 4 o a .NET Framework 4.5, deberá realizar uno de los siguientes cambios en el código:

  • Modifique cualquier código que llame al método DoSomethingToSheet para pasar la propiedad Base de un objeto Microsoft.Office.Tools.Excel.WorksheetBase en el proyecto.Esta propiedad devuelve un objeto Microsoft.Office.Tools.Excel.Worksheet.

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modifique el parámetro de método DoSomethingToSheet de modo que se espere un objeto Microsoft.Office.Tools.Excel.WorksheetBase.

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

Actualizar el código que utiliza controles 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 al principio de cualquier archivo de código que use la propiedad Controls para agregar controles de Windows Forms al documento o la hoja de cálculo mediante programación.

En proyectos destinados a .NET Framework 3.5, los métodos que agregan controles de Windows Forms (por ejemplo, el método AddButton) se definen en las clases Microsoft.Office.Tools.Word.ControlCollection y Microsoft.Office.Tools.Excel.ControlCollection.

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, estos métodos son métodos de extensión que están disponibles en la propiedad de Controls.Para usar estos métodos de extensión, el archivo de código en el que se usan 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 destinados .NET Framework 4 o .NET Framework 4.5.Sin embargo, no se agrega automáticamente en el caso de los proyectos destinados a .NET Framework 3.5, por lo que es necesario agregarla cuando se modifica el destino del proyecto.

Para obtener más información, vea Agregar controles a documentos de Office en tiempo de ejecución.

Actualizar el código que controla eventos de control de contenido de Word

En proyectos destinados a .NET Framework 3.5, los eventos de los controles de contenido de Word los controla el delegado EventHandler<TEventArgs> genérico.En proyectos destinados .NET Framework 4 o .NET Framework 4.5, estos eventos controla otros delegados.

La tabla siguiente se enumeran los eventos de control de contenido de word y los delegados asociados a ellos en proyectos destinados .NET Framework 4 o .NET Framework 4.5.

Evento

Delegado que se va a usar en .NET Framework 4 y los proyectos de .NET Framework 4.5

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

Actualizar el código que utiliza las clases OLEObject y OLEControl

En proyectos destinados a .NET Framework 3.5, puede agregar controles personalizados (por ejemplo, controles de usuario de Windows Forms) a un documento o una hoja de cálculo utilizando las clases Microsoft.Office.Tools.Word.OLEControl y Microsoft.Office.Tools.Excel.OLEObject.

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, estas clases se han reemplazado por las interfaces de Microsoft.Office.Tools.Excel.ControlSite y de Microsoft.Office.Tools.Word.ControlSite.Debe modificar el código que haga referencia a Microsoft.Office.Tools.Excel.OLEObject y Microsoft.Office.Tools.Word.OLEControl de modo que haga referencia a Microsoft.Office.Tools.Excel.ControlSite y Microsoft.Office.Tools.Word.ControlSite.Aparte de los nuevos nombres, estos controles se comportan de la misma manera que en los proyectos destinados a .NET Framework 3.5.

Para obtener más información, vea Agregar controles a documentos de Office en tiempo de ejecución.

Actualizar el código que utiliza la propiedad Controls.Item(Object)

En proyectos destinados a .NET Framework 3.5, puede utilizar la propiedad Item(Object) property of the 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 concreto.

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, la propiedad de Item(Object) se ha quitado de estas colecciones.Para determinar si un documento o una hoja de cálculo contiene un control concreto, utilice el método Contains(System.Object) de la colección Document.Controls o Worksheet.Controls.

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 el código que utiliza colecciones que derivan de CollectionBase

En proyectos destinados a .NET Framework 3.5, hay varios tipos de colección en Runtime de Microsoft Visual Studio Tools para Office que derivan de la clase CollectionBase, por ejemplo Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollection y Microsoft.Office.Tools.Word.ControlCollection.

En proyectos destinados .NET Framework 4 o .NET Framework 4.5, 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 e InnerList.

Vea también

Conceptos

Migrar soluciones de Office a .NET Framework 4 o .NET Framework 4.5

Controles de contenido

Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución

Agregar controles a documentos de Office en tiempo de ejecución

Acceso global a objetos en los proyectos de Office