viernes, 30 de septiembre de 2011

Creación de soluciones para Excel usando Visual Studio

Buenas en esta nueva entrada me voy a centrar en cómo integrar Visual Studio con Office. Para ello voy a crear primero un proyecto libro de Excel 2010 al cual añadiré un panel de acciones y luego voy a crear un proyecto complemento para Excel todo ello con VB.NET como lenguaje de programación. Esto mismo que voy a crear con Excel también se podría crear con otra aplicación de Office como Word o Outlook sin problemas, pero me voy a centrar en Excel ya que es la aplicación que con más alegría se usa en entornos empresariales. Como verás Visual Studio 2010 integra este conjunto de herramientas y plantillas para la creación y personalización de soluciones para Office, que para los que no lo recuerden hace no mucho tiempo toda esta funcionalidad estaba en una descarga aparte llamada ‘Visual Studio Tools for Office’.

La principal diferencia entre crear un nuevo proyecto seleccionado la plantilla ‘Libro de Excel 2010’ o seleccionado la plantilla ‘Complemento de Excel 2010’ es que usando la primera todo el código que escribamos y toda la funcionalidad que añadamos sólo estará disponible para el libro de Excel que vamos a crear. Si abrimos otro libro pues esa funcionalidad no estará disponible. Cuando por el contrario creamos un complemento el código es independiente de cualquier documento y siempre estará disponible en Excel a menos que desinstalemos el complemento a través de la ficha de ‘Programador’ de Excel 2010 del menú y el botón ‘Complementos COM’. Este último proyecto es ideal por ejemplo si queremos crear un complemento que nos añada a la cinta principal del Excel (el antiguo menú principal) alguna funcionalidad, por ejemplo un botón para que cuando el usuario pulse se ejecute cierto código que nos muestre en una celda de Excel la hora actual y que este botón esté disponible sea cual sea el libro de Excel que abra. Es un ejemplo muy simple lógicamente.

Pero aquí alguien me podría decir que todo esto está muy bien que es lo que ganamos frente a usar VBA en Excel. Podría decir que es más simple, que usamos Visual Basic 6 (pocas líneas de código), que podemos grabar macros fácilmente que nos ayudan a la hora de escribir código. Si todo esto está muy bien pero aquí lo interesante es poder usar los controles y la potencialidad de Visual Studio y VB.NET para trabajar con Excel. Por ejemplo que pasa si queremos conectarnos a una base de datos SQL y ejecutar un procedimiento almacenado que nos devuelva cierta información que luego se muestre en Excel, si queremos controles más complejos que los que podemos agregar a un formulario usando VBA (por ejemplo un DataGridView) o si por ejemplo queremos manejar las Excepciones de una manera más profesional que usando ‘On Error Resume Next’ y por no hablar de depurar nuestro código como podríamos depurar cualquier otro proyecto que diseñemos en Visual Studio.

Voy a poner 2 ejemplos. El primero, más sencillo, en el que crearé un proyecto ‘Libro de Excel 2010’ al cual le voy a añadir un control Calendar al panel de acciones como se ve en la siguiente imagen:














El segundo será un proyecto ‘Complemento de Excel 2010’ que nos permitirá seleccionar un precio máximo de un producto y que al pulsar a un botón del menú se ejecutará un método que primero se conectará a la base de datos Northwind, ejecutará un procedimiento almacenado y devolverá una lista de productos cuyo precio sea menor o igual al precio pasado como parámetro y dicha lista se mostrará en el libro Excel. Voy a usar LINQToSQL pero también se podría hacer los mismo abriendo una conexión y usando un SQLCommand (si trabajamos con un ambiente conectado). Cuando creemos un complemento para Excel veremos que no se nos crea un libro de Excel y no podrems añadir un elemento ActionPaneControl, sino que para que este complemento esté disponible siempre que habramos el Excel voy a añadirle un elementol Cinta (diseñador visual) como se ve en la imagen:











Y el vídeo es el siguiente:

Bueno en siguientes entradas me centraré en otra aplicación que estoy diseñando como la aplicación ‘Norma34Creator’ pero esta vez para temas fiscales y más tarde es posible que según si tengo tiempo cuelgue alguna aplicación desarrollada en Java usando el conocido IDE Netbeans, que aún está en betatesteo. Como digo, es bueno a parte de .NET conocer otras tecnologías y lenguajes para más que otra cosa no casarse con una única plataforma.