Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

lunes, 17 de marzo de 2008

Una aproximación a Visual Studio Tools for Office (VSTO).

Entre los proyectos de desarrollo software que nos brinda la versión 2008 de Visual Studio nos encontramos con un viejo conocido: las Visual Studio Tools for Office (VSTO), que ya venían incluidas "de serie" en VS 2005, y que permiten la interoperabilidad de Office con nuestra plataforma de desarrollo preferida. En VS 2008 podemos desarrollar herramientas para Office en sus versiones 2003 y 2007, integrándolas en las diversas aplicaciones del paquete ofimático de Microsoft. Hoy veremos cómo crear una sencilla herramienta que quedará integrada en Excel.


vsto001.PNG


En primer lugar, creamos un nuevo proyecto en Visual Studio 2008, de tipo Office 2007 - Excel Add-In, al que daremos un nombre de ejemplo.


vsto002.PNG


La estructura del proyecto generado por Visual Studio será similar a la que presentamos:


vsto003.PNG


Añadimos ahora un nuevo elemento al proyecto, de tipo Ribbon. Los ribbons constituyen parte del interfaz gráfico sensible al contexto de Office a partir de su última versión y, en cierto modo, constituyen una extensión de los entornos gráficos con múltiples pestañas (tabs), como los conocidos Dreamweaver o Flash, actualmente de la empresa Adobe. Al crear un ribbon podemos optar por trabajar con su definición en XML, o mediante el diseñador. En nuestro ejemplo, optamos por esta última opción.


vsto004.PNG


Al crearlo, veremos que el Ribbon estará compuesto por uno o más RibbonGroups, un agrupador de funcionalidades, en los que iremos incluyendo los controles necesarios de nuestro interfaz. En nuestro caso, agregamos un RibbonToggleButton (un botón que puede estar "ON" u "OFF"), y un RibbonButton, un botón normal, que tras su pulsación "vuelve" a su estado inicial automáticamente. El primero tendrá como objetivo mostrar, en el lateral de Excel, un panel de tareas (Task Pane), y el segundo podría servir para ejecutar una acción. Como nombre les daremos "Cargar ficheros" y "Ejecutar", respetivamente, y el aspecto que tendrá nuestro Ribbon tras esto será el siguiente:


vsto005.PNG


Para el Task Pane, lo más cómodo será agregar un nuevo control de usuario (User Control) al proyecto, e incluir en el mismo un botón y un ListBox. La función de los mismos será, mediante el botón, abrir una ventana de dialogo (OpenFileDialog) desde la que seleccionar los archivos a cargar, que quedarán listados en el ListBox. A la vez, crearemos una nueva hoja de cálculo dentro de nuestro libro Excel, correspondiente al fichero cargado. El ListBox nos servirá para eliminar los archivos abiertos mediante este método. El aspecto del control será:


vsto006.PNG


Y ahora, comenzamos a codificar. En primer lugar, tenemos el fichero ThisAddIn, incluido automáticamente por Visual Studio cuando creamos el proyecto. En el mismo se codificarán los métodos ThisAddIn_Startup y ThisAddIn_Shutdown, correspondientes a los eventos de inicio y finalización de ejecución de la herramienta. En el método de inicio, codificaremos la definición de un Ribbon, del UserControl y el TaskPane.


[csharp]private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// Create ribbon
myRibbon = new MyFirstRibbon();
// Create user control
LateralViewUC uc = new LateralViewUC();
// Create the task pane
ctp = this.CustomTaskPanes.Add(uc, "Trace Comparer: Files");
ctp.Visible = false;
}[/csharp]

Con esto conseguiremos que al iniciar la aplicación, Excel muestre nuestro Ribbon, y permita mostrar u ocultar un panel de tareas en cuyo interior se encontrará el control de usuario que hemos definido. Para que se muestre u oculte el panel de tareas, deberemos codificar el evento correspondiente para el botón de "Cargar ficheros" del Ribbon. El método lo encadenaremos al manejador de eventos asociado al evento Click del ToggleButton. Con un mero doble click sobre el botón, aparecerá el método método


private void FirstToggleButton_Click(object sender, RibbonControlEventArgs e)

Que realmente se habrá asociado al click del botón a través del siguiente código, en el código del diseñador del Ribbon:


this.FirstToggleButton.Click += new System.EventHandler(this.FirstToggleButton_Click);

La visibilidad del panel de tareas vendrá determinado, dentro del método por el código:


Globals.ThisAddIn.ctp.Visible = isPressed;

El código del control de usuario, por otro lado, es trivial. Se trata simplemente de abrir el cuadro de diálogo que permita seleccionar el archivo. Una vez cargado, se incluye en el ListBox y se crea una hoja Excel para el mismo.



vsto020.PNG
vsto021.PNG

La creación y borrado de las hojas Excel podría hacerse mediante el siguiente código:


[csharp]public void CreateSheet(string sheetName)
{
try
{
Excel.Worksheet mySheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
mySheet.Name = sheetName;
}
catch (Exception ex)
{
throw ex;
}
}[/csharp]

[csharp]public void DeleteSheet(string sheetName)
{
try
{
Excel.Workbook myBook = Globals.ThisAddIn.Application.ActiveWorkbook;
((Excel.Worksheet)(myBook.Sheets[sheetName])).Delete();
}
catch (Exception ex)
{
throw ex;
}
}[/csharp]

De este modo, tendremos lista una simple herramienta de carga de ficheros a Excel mediante Visual Studio Tools for Office.


[download#3#size]

No hay comentarios:

Publicar un comentario