Excel, una herramienta universal

Puedo relatar con orgullo que mi generación tuvo la fortuna de ser los pioneros en la ciudad de Aguascalientes de la incipientes carreras en lo que anteriormente se llamaba “informática”.

A nivel superior en la UAA se ofertaba la Ingeniería en Sistemas y la Licenciatura en Informática, al lado oriente en el Tecnológico de Aguascalientes: la Licenciatura en Informática.

Cuando la parte de educación media que ofertaba el Tecnológico se dejo de ofrecer esto dio paso a creación de los CBTis (Centros de Bachillerato Tecnológico, Industrial y de Servicios) y CETis (Centros de Estudio Tecnológico, Industrial y de Servicios).

El CETis #155 primero y el CBTis #168 fueron los pioneros en ofertar “la carrera del futuro”: “Técnico Profesional en Programación” y “Técnico en Programación”.

En el CETis #155 mi alma mater, cuna de tantos recuerdos, satisfacciones, alegrías y uno que otro desamor, gran generador de conocimientos y habilidades que sustentan al profesionista que hoy soy, en esa modesta pero pulcra institución conocimos el WordStar, Lotus y Dbase, los abuelos de Microsoft Word, Excel, y los poderosos motores de bases de datos relacionales.

A excepción de las primeras generaciones de licenciados en informática e ingenieros en sistemas que lidiaron un poco con el “equipo grande” y las mini-computadoras, mi generación se enfrentó directamente con las microcomputadoras a finales de los 80’s y sin duda las incipientes aplicaciones de ofimática en el caso de Lotus 1-2-3, empezaban a desplazar las hojas tabulares y demás procesos manuales de cálculo.

Excel, como bien lo dijo una vez el Doctor José Manuel Mora, resulta inclusive una aplicación para el desarrollo de los llamados DDS (Decision Support System), por ello es que se ofertan tantos cursos a todos los niveles de la socorrida herramienta y hasta me atrevo a decir que muchos ascensos laborales están detrás del “expertise” que se tiene de ella.

Es por ello – sobre todo estudiantes y colegas de TICs – que debemos darle la debida importancia y no menospreciar esta ni ninguna herramienta, muchas veces nos hemos enfrentado y nos seguiremos enfrentando a consultas sobre el universal Excel, entonces sin duda debemos conocerle y tratar de automatizar las tareas lo más posible.

Hace algunos meses publiqué un artículo que nos sacó de apuros en el trabajo, en aquella ocasión usé la herramienta interna que usa Excel, es decir Visual Basic para Aplicaciones (VBA).

Entre que me siento poco perdido en VBA y que me parece un poco obsoleto su IDE, mejor opté por Microsoft Visual .NET ante la petición – casi reclamo – de nuestro director de que los procesos manuales tenían que automatizarse aun más – para bajar los tiempos y el hastío de nuestro personal técnico que realiza la “talacha”.

Mi subdirector y jefe Ernesto Espinoza ya nos había proporcionado un proyecto de .NET que manipula archivos en Excel que combinado con lo que encontré en la red y ante la falta de algún curso o libro empezamos con estos recursos para la automatización de la entrega de insumos para el cálculo de precisiones estadísticas para cuadros estadísticos en Excel.

Lo primero fue como crear un archivo en Excel insertarle datos y mostrarlos en una gráfica, eso se encuentra rápido en la página de soporte Microsoft [1], escueto, pero esta.

Como esta de moda el Windows Presentation Fundation (wpf) lo haremos de esta forma.

1. Creamos un nuevo proyecto.

2. Un formulario (MainWindow) con un botón que hará todo, es decir agregamos el botón.

3. Esta parte es la que veo un poco escueto el artículo de Microsoft, ya que no es fácil identificar la Biblioteca de objetos de Microsoft Excel ( llamados PIA – Ensamblados de Inter-operabilidad Primarios por sus siglas en inglés), ya que esto dependerá de las versiones de Office que se tengan instaladas.

Nosotros tenemos Excel 2013 y con esta versión del ensablado funcionó el ejemplo.

5. Aquí sigue el clásico “Copiar-Pegar” que no me gusta, diría estimada amiga Clara “quizás me llamen retrograda” pero me gusta escribir el código y así lo hice la primera vez, aunque argumento a mi favor que un milenial quien me dio la certificación de Java nos hacía escribir el código desde cero. Programamos el evento “Click” del botón.

Quizás les pase como a mi, generalmente ponemos las referencias “using x.x.x;”, y pues el IDE marcaba en rojo el código a la hora de definir los objetos de Excel.

Lo que tenemos que hacer es una forma que no conocía de como se referencíaban los ensamblados y más abajo lo aclaran, tenemos que hacer using Excel = Microsoft.Office.Interop.Excel;

Podemos observar como .Net y este ensamblado abstrae la aplicación definiendo cuatro objetos de Microsoft Excel – la aplicación, el libro, la hoja y un rango. Cuando decimos que para este caso oXL es la aplicación, lo decimos en serio, como veremos el resultado una instancia de Excel se abre gracias a la propiedad Visible (oXL.Visible = true;)

En el código también se observa la creación de un libro y una hoja nueva de Excel, en estas primeras líneas la hoja (oSheet) se accesa a ella como una matriz renglón-columna (oSheet.Cells[1,1]=”First Name”) la instrucción anterior asignará el valor “First Name” a la celda A1.

Las últimas 2 líneas tenemos el formateo de los textos – en este caso los cabeceros de la tabla – centrándolos y dándoles el estilo de “negritas”. Para ello accesamos al método get_Range() que no aparece en el “intellisense” del IDE, lo que puede causar confusión a la hora de programar.

Aquí algo potencialmente poderoso, ya que si bien vemos aquí son datos estáticos (un arreglo de 2 dimensiones), estos pudieran provenir de una tabla de una base de datos relacional, de un base de datos NoSql, de otro archivo Excel o de cualquier fuente de datos. Podemos observar como la propiedad Value2 recibe el arreglo y lo inserta en las celdas del rango (sSheet.get_Range(“A2”,”B6”).Value2 = saNames;).

Otra cosa importante y muy útil la aplicación de fórmulas y formatos a rangos definidos, en este caso se concatena el First Name con el Last Name y se crean valores aleatorios que se multiplican por 100000, para las columnas C (Full Name) y D (Salary) respectivamente, además se ajusta la tabla a la longitud de los valores de las celdas y en el caso de los salarios se agrega el formato de Moneda, divertido, ¿no?

Por el momento en este post no hablaremos de la parte del gráfico, y aquí entra Excel y toma el control y foco en el sistema operativo, se agrega también el código para manejar las excepciones. Se hace con las siguientes 2 instrucciones:

oXL.Visible = true;

oXL.UserControl = true;

Vamos a ejecutar el programa y observamos como se abre Excel y se muestran los resultados.

Ahora vamos con el constructivismo, ¿y si quiero guardar el libro con estos resultados?

Por intuición lo pude hacer ya que la instancia del libro (en este caso oWB) tiene un método llamado SaveAs() pero me dejaba el archivo bloqueado pues quizás la instancia (proceso) se quedaba corriendo. Como tip les puedo decir que cuando eso ocurra y eviten apagar el equipo o cambiar de libro de Excel, pueden finalizar la tarea, usando <<Ctrl-Alt-Supr>>, se van al Administrador de Procesos (tareas), buscan los procesos en segundo plano y los finalizan.

Entonces me fui a la aplicación que nos paso Ernesto y ahí se puede guardar en un archivo, y además se finaliza del todo Microsoft Excel.

Primero vamos a decir que la aplicación de Excel no este Visible y no despliegue mensajes, esto al principio cuando creamos la aplicación.

//Start Excel and get Application object.

oXL = new Excel.Application();

oXL.Visible = false;

oXL.DisplayAlerts = false;

Ahora no usaremos el Dialog de las aplicaciones de escritorio de Windows Form, vamos a crear el propio, algo muy sencillo, agregamos al proyecto una ventana (Window) wpf.

De rebote investigamos y aprendimos como desplegar una ventana Modal en Wpf [2], leemos lo que nos dio el usuario, guardamos el archivo y cerramos todo con el código que les mencioné.

Podemos ver la aplicación corriendo en este link de mi canal de YouTube.

Con ello tenemos un nuevo Libro de Excel que pudieran ser en si los reportes que tanto trabajo nos han costado en estos días por la cantidad de los mismos.

Hasta aquí este aporte, y seguimos leyéndonos.

Profesor Miguel Araujo.

Webgrafía

[1] Sitio de Microsoft.

Cómo automatizar Microsoft Excel desde Microsoft Visual C# .NET

https://support.microsoft.com/es-mx/help/302084/how-to-automate-microsoft-excel-from-microsoft-visual-c-net

[2] Microsoft Development Network

Ventanas Modales en WPF

Nicolás Herrera

https://msdn.microsoft.com/es-es/communitydocs/web-dev/dev/ventanas-modales-en-wpf

Deja un comentario