Compartir a través de


Tutorial: Programación de Office en Visual Basic

Visual Studio presenta características en Visual Basic que mejoran la programación de Microsoft Office. Las nuevas características de Visual Basic incluyen propiedades implementadas automáticamente, instrucciones de expresiones lambda e inicializadores de colección. Puede insertar información de tipo, lo que permite la implementación de ensamblados que interactúan con componentes COM sin necesidad de implementar ensamblados de interoperabilidad primarios (PIA) en el equipo del usuario. Para obtener más información, vea Tutorial: Insertar los tipos de los ensamblados administrados.

En este tutorial se muestran estas características en el contexto de la programación de Office, pero muchas de ellas también son útiles en la programación general. En el tutorial, usa una aplicación complemento de Excel para crear un libro de Excel. Después, crea un documento de Word que contiene un vínculo al libro. Por último, ve cómo habilitar y deshabilitar la dependencia de un PIA.

Requisitos previos

Debe tener Microsoft Office Excel y Microsoft Office Word instalados en su equipo para completar este tutorial.

Nota:

Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.

Configuración de una aplicación complemento de Excel

  1. Inicie Visual Studio.

  2. En el menú Archivo , elija Nuevoy haga clic en Proyecto.

  3. En el panel Plantillas instaladas, expanda Visual Basic, expanda Office y, después, haga clic en el año de la versión del producto de Office.

  4. En el panel Plantillas, haga clic en Excel<versión> Complemento.

  5. En la parte superior del panel Plantillas, asegúrese de que .NET Framework 4 o una versión posterior aparece en el cuadro Plataforma de destino.

  6. Si quiere, escriba un nombre para el proyecto en el cuadro Nombre.

  7. Haga clic en Aceptar.

  8. El proyecto nuevo aparece en el Explorador de soluciones.

Agregar referencias

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y seleccione Agregar referencia. Aparecerá el cuadro de diálogo Agregar referencia.

  2. En la pestaña Ensamblados, seleccione Microsoft.Office.Interop.Excel, versión <version>.0.0.0 (para obtener una clave de los números de versión de productos de Office, vea Versiones de Microsoft), en la lista Nombre de componente y, después, mantenga presionada la tecla CTRL y seleccione Microsoft.Office.Interop.Word, version <version>.0.0.0. Si no ve los ensamblados, asegúrese de que están instalados y que se muestran (vea Cómo: Instalación de ensamblados de interoperabilidad primarios de Office).

  3. Haga clic en Aceptar.

Incorporación de las instrucciones Imports necesarias o las directivas using

  1. En el Explorador de soluciones, haga clic con el botón derecho en el archivo ThisAddIn.vb o ThisAddIn.cs y luego haga clic en Ver código.

  2. Agregue las siguientes instrucciones Imports en la parte superior del archivo de código si no están ya presentes.

    Imports Microsoft.Office.Interop
    

Creación de una lista de cuentas bancarias

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto, haga clic en Agregar y luego, en Clase. Asigne un nombre a la clase Account.vb. Haga clic en Agregar.

  2. Reemplace la definición de la clase Account por el código siguiente. Las definiciones de clase usan propiedades implementadas automáticamente. Para obtener más información, vea Propiedades implementadas automáticamente.

    Public Class Account
        Property ID As Integer = -1
        Property Balance As Double
    End Class
    
  3. Para crear una lista bankAccounts que contenga dos cuentas, agregue el código siguiente al método ThisAddIn_Startup en ThisAddIn.cs. Las declaraciones de lista usan inicializadores de colección. Para obtener más información, vea Inicializadores de colección.

    Dim bankAccounts As New List(Of Account) From {
        New Account With {
                              .ID = 345,
                              .Balance = 541.27
                         },
        New Account With {
                              .ID = 123,
                              .Balance = -127.44
                         }
        }
    

Exportación de datos a Excel

  1. En el mismo archivo, agregue el siguiente método a la clase ThisAddIn. El método configura un libro de Excel, a donde exporta los datos.

    Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account),
                   ByVal DisplayAction As Action(Of Account, Excel.Range))
    
        With Me.Application
            ' Add a new Excel workbook.
            .Workbooks.Add()
            .Visible = True
            .Range("A1").Value = "ID"
            .Range("B1").Value = "Balance"
            .Range("A2").Select()
    
            For Each ac In accounts
                DisplayAction(ac, .ActiveCell)
                .ActiveCell.Offset(1, 0).Select()
            Next
    
            ' Copy the results to the Clipboard.
            .Range("A1:B3").Copy()
        End With
    End Sub
    
    • El método Add tiene un parámetro opcional para especificar una plantilla determinada. Los parámetros opcionales permiten omitir el argumento de ese parámetro si se desea utilizar el valor predeterminado del parámetro. Dado que en el ejemplo anterior no se envía ningún argumento, Add usa la plantilla predeterminada y crea un libro nuevo.

    • Las propiedades Range y Offset del objeto Range usan la característica de propiedades indizadas. Las propiedades indizadas también permiten utilizar la propiedad Value del objeto Range, eliminando la necesidad de utilizar la propiedad Value2. La propiedad Value está indizada, pero el índice es opcional. Los argumentos opcionales y las propiedades indizadas funcionan conjuntamente en el ejemplo siguiente.

  2. Agregue el código siguiente al final de DisplayInExcel para ajustar los anchos de columna a fin de adaptarlos al contenido.

    ' Add the following two lines at the end of the With statement.
    .Columns(1).AutoFit()
    .Columns(2).AutoFit()
    

    Para obtener más información sobre cómo insertar tipos de interoperabilidad, consulte los procedimientos "Búsqueda de la referencia a un PIA" y "Restauración de la dependencia de un PIA" más adelante en este artículo.

Invocación de DisplayInExcel

  1. Agregue el código siguiente al final del método ThisAddIn_StartUp. La llamada a DisplayInExcel contiene dos argumentos. El primer argumento es el nombre de la lista de cuentas que se va a procesar. El segundo argumento es una expresión lambda de varias líneas que define cómo se procesarán los datos. Los valores ID y balance de cada cuenta se muestran en las celdas adyacentes y la fila se muestra en rojo si el saldo es inferior a cero.

    DisplayInExcel(bankAccounts,
           Sub(account, cell)
               ' This multiline lambda expression sets custom
               ' processing rules for the bankAccounts.
               cell.Value = account.ID
               cell.Offset(0, 1).Value = account.Balance
    
               If account.Balance < 0 Then
                   cell.Interior.Color = RGB(255, 0, 0)
                   cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0)
               End If
           End Sub)
    
  2. Presione F5 para ejecutar el programa. Aparece una hoja de cálculo de Excel que contiene los datos de las cuentas.

Incorporación de un documento de Word

  1. Agregue el código siguiente al final del método ThisAddIn_StartUp para crear un documento de Word que contenga un vínculo al libro de Excel.

    Dim wordApp As New Word.Application
    wordApp.Visible = True
    wordApp.Documents.Add()
    wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
    

    El método PasteSpecial tiene siete parámetros, y todos se definen como parámetros de referencia opcionales. Los argumentos opcionales y con nombre permiten designar los parámetros a los que se quiere tener acceso por nombre, y enviar argumentos únicamente a esos parámetros. En este ejemplo se envían argumentos para indicar que se debe crear un vínculo al libro en el Portapapeles (parámetro Link), y que el vínculo se mostrará en el documento de Word como un icono (parámetro DisplayAsIcon).

Ejecución de la aplicación

  1. Presione F5 para ejecutar la aplicación. Excel se abre y muestra una tabla que contiene la información de las dos cuentas de bankAccounts. Entonces aparece un documento de Word que contiene un vínculo a la tabla de Excel.

Limpieza del proyecto completado

  1. En Visual Studio, haga clic en Limpiar solución en el menú Compilación. De lo contrario, el complemento se ejecutará cada vez que abra Excel en el equipo.

Búsqueda de la referencia de PIA

  1. Ejecute de nuevo la aplicación, pero no haga clic en Limpiar solución.

  2. Seleccione Iniciar. Busque Microsoft Visual Studio <versión> y abra un símbolo del sistema del desarrollador.

  3. Escriba ildasm en la ventana Símbolo del sistema para desarrolladores de Visual Studio y, luego, presione ENTRAR. Aparecerá la ventana IL DASM.

  4. En el menú Archivo de la ventana de IL DASM, seleccione Archivo>Abrir. Haga doble clic en Visual Studio <versión> y, después, haga doble clic en Proyectos. Abra la carpeta de su proyecto y, en la carpeta bin/Debug, busque su_proyecto.dll. Haga doble clic en su_proyecto.dll. Una nueva ventana muestra los atributos del proyecto, además de las referencias a otros módulos y ensamblados. Tenga en cuenta que los espacios de nombres Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.Word se incluyen en el ensamblado. De manera predeterminada en Visual Studio, el compilador importa los tipos necesarios desde un PIA con referencia a su ensamblado.

    Para obtener más información, vea Cómo: Consulta del contenido de un ensamblado.

  5. Haga doble clic en el icono MANIFIESTO. Aparecerá una ventana con una lista de ensamblados que contienen los elementos a los que hace referencia el proyecto. Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.Word no están incluidos en la lista. Dado que los tipos que su proyecto necesita se han importado en el ensamblado, las referencias a un PIA no son necesarias. Esto facilita la implementación. Los PIA no tienen que estar presentes en el equipo del usuario y, puesto que una aplicación no requiere la implementación de una versión concreta de un PIA, se pueden diseñar aplicaciones que trabajen con varias versiones de Office, siempre que las API necesarias existan en todas las versiones.

    Dado que la implementación de los PIA ya no es necesaria, puede crear una aplicación en escenarios avanzados que funcione con varias versiones de Office, incluidas versiones anteriores. Sin embargo, esto solo funciona si el código no utiliza ninguna API que no esté disponible en la versión de Office con la que está trabajando. No siempre está claro si una API concreta estaba disponible en una versión anterior y por ese motivo no recomendamos trabajar con versiones anteriores de Office.

    Nota

    Office no publicó ensamblados PIA antes de Office 2003. Por lo tanto, la única manera de generar un ensamblado de interoperabilidad para Office 2002 o versiones anteriores es mediante la importación de la referencia COM.

  6. Cierre la ventana del manifiesto y la del ensamblado.

Restauración de la dependencia de PIA

  1. En el Explorador de soluciones, haga clic en el botón Mostrar todos los archivos. Expanda la carpeta Referencias y seleccione Microsoft.Office.Interop.Excel. Pulse F4 para abrir la ventana Propiedades.
  2. En la ventana Propiedades, cambie la propiedad Incrustar tipos de interoperabilidad de True a False.
  3. Repita los pasos 1 y 2 de este procedimiento para Microsoft.Office.Interop.Word.
  4. Presione F5 para comprobar que el proyecto sigue ejecutándose correctamente.
  5. Repita los pasos 1 a 3 del procedimiento anterior para abrir la ventana de ensamblado. Observe que Microsoft.Office.Interop.Word y Microsoft.Office.Interop.Excel ya no están en la lista de ensamblados insertados.
  6. Haga doble clic en el icono MANIFIESTO y desplácese por la lista de ensamblados de referencia. Tanto Microsoft.Office.Interop.Word como Microsoft.Office.Interop.Excel están en la lista. Dado que la aplicación hace referencia a los PIA de Excel y Word y la propiedad Incrustar tipos de interoperabilidad se establece en False, ambos ensamblados deben existir en el equipo del usuario final.
  7. En Visual Studio, haga clic en Limpiar solución en el menú Compilación para limpiar el proyecto completado.

Consulte también