domingo, 5 de noviembre de 2017

Importar datos desde Excel en C#



Este es un requerimiento con el que muchas veces nos encontramos: ¿Cómo leer datos desde una hoja de cálculo de Microsoft Excel (o similares), utilizando C#? Bueno, existen muchas herramientas y técnicas en el salvaje internet para leer archivos de Excel, desde utilizar las librerías de objetos para interoperabilidad provistas al instalar Excel, utilizar un proveedor OleDB, hasta crear tu propia librería para manipular los archivos de Excel, que después de todo, solo son conjuntos de archivos XML comprimidos con una extensión especial (al menos desde Office 2007).

Sin embargo, mi forma preferida de hacerlo desde hace un par de años, ha sido utilizar la librería EPPlus, que es una librería de código abierto creada por Jan Källman, que provee una API amigable y avanzada para la manipulación de archivos con el formato Office Open XML. Esta librería, publicada bajo la licencia GNU Lesser General Public License, provee funcionalidades que van desde acceder a las celdas de las hojas de cálculo, hasta crear gráficos y tablas dinámicas, así como protección y encriptación de documentos.

EPPlus no necesita librerías de interoperabilidad, ni posee otras dependencias aparte del .NET Framework. Esto permite distribuir la librería como parte de nuestro proyecto, sin requerir la instalación de componentes de terceros. Y lo mejor de todo: está disponible como un paquete de NuGet. Gracias a ello, solo basta con buscar el paquete EPPlus desde el administrador de paquetes de NuGet de Visual Studio, e instalarlo en nuestro proyecto, para hace uso de la librería.

Supongamos por ejemplo que se desea leer un archivo de Excel que contiene en la primera hoja un listado de productos, con los datos Código, Nombre y Precio en las columnas A, B y C, respectivamente. Por simplicidad, asumiremos que todos los productos poseen todos los datos, y que finalizaremos la lectura al alcanzar la primera fila cuyo valor en la columna A esté en blanco. También tendremos en consideración que la primera fila de la hoja posee los encabezados de las columnas. Tendríamos algo así:


Nuestro objetivo será hacer una aplicación de consola sencilla, que lea el listado de productos, y los muestre en la línea de comandos. Para ello, creamos una nueva aplicación de consola de .NET Framework, desde Visual Studio, e instalamos el paquete EPPlus:


Luego, importamos el espacio de nombres OfficeOpenXml, provisto por el paquete EPPlus para el acceso a los archivos de Excel, y System.IO, para la lectura de archivos desde el disco duro. Luego, se procede a escribir el código en el método Main de la clase Program. A continuación se muestra el código fuente final, en el que se explica paso a paso a través de los comentarios el proceso para la lectura del archivo:


El resultado de ejecutar el programa anterior, con el archivo de Excel mostrado, es el siguiente:


Cabe mencionar que el archivo de Excel no debe estar abierto, para poder ser leído. De lo contrario, la aplicación lanzará una excepción al intentarlo leer.

Espero que este ejemplo les haya sido de utilidad, y que se animen a utilizar EPPlus como una alternativa para la manipulación de hojas de cálculo. Que tengan un feliz día.

viernes, 3 de noviembre de 2017

Complementos del navegador para pruebas automatizadas - SideeX


Saludos, en esta ocasión quería compartirles acerca de una herramienta que puede ser de ayuda para la creación de pruebas automatizadas utilizando Selenium: SideeX.

SideeX es, según su sitio web, una versión extendida del Selenium IDE (no sabía que existía hasta la semana pasada :P), el cual es una herramienta del tipo grabar-repetir para la generación de conjuntos de pruebas de UI (Interfaz de usuario) utilizando Selenium. Es extendida debido a que posee funcionalidades adicionales a las de Selenium IDE, y ha sido adoptada oficialmente por el SeleniumHQ como punto de partida para las siguientes versiones de Selenium IDE. Adicionalmente, no solo está disponible como extensión para Firefox, sino también para Google Chrome.

Tomando como ejemplo la versión de Google Chrome, para instalarlo basta con instalarlo en el navegador desde el respectivo enlace (https://chrome.google.com/webstore/detail/sideex-an-extended-versio/nefadabeoagfkgmkgegmjgdhegbllple), presionando el botón Agregar a Chrome.


La versión instalada durante la escritura de esta entrada es la v2.3.0. Una vez instalado, el botón con el logo de SideeX aparecerá en la parte superior derecha del navegador. Dicho botón sirve para iniciar la extensión.



Crearemos un caso de pruebas sencillo para ver SideeX en acción. Para ello, accederemos a la página de inicio de sesión de pruebas del artículo anterior: http://www.phptravels.net/admin

Una vez allí, presionamos el botón de SideeX, para iniciar la extensión. Ello nos despliega la ventana principal de SideeX.


Con ello, podemos proceder a grabar nuestro primer caso de pruebas, presionando el botón Record (Grabar), ubicado en la parte superior izquierda de la ventana de SideeX.


Inmediatamente procedemos a realizar nosotros mismos los pasos de la prueba que deseamos realizar en la página de login. Por ejemplo:

1. Hacer clic sobre la caja de texto del correo electrónico. Nótese como se van registrando los pasos en la tabla de comandos de SideeX. Para este primer paso se registran dos comandos: Abrir la página web, y hacer clic sobre la caja de texto del correo electrónico.


2. Digitar el correo electrónico.
3. Cambiar a la caja de texto de la contraseña y digitarla. En este caso se observará que no se registró comando de clic, debido a que el cambio a la siguiente caja de texto se hizo presionando el botón de tabulación.
4. Hacer clic sobre el botón Login.

Por simplicidad dejaremos el caso de pruebas hasta acá. Para detener la grabación, basta con presionar el botón Stop en la ventana de SideeX.


Para reproducir el caso de pruebas, basta con presionar el botón PlayThisCase. Se observará como SideeX reporduce los pasos grabados en el navegador, mostrando en la tabla de comandos el paso ejecutado, y pintando de verde las filas cuya ejecución fue exitosa. También, en la parte inferior irá apareciendo la bitácora de las acciones ejecutadas.


Para guardar la colección de pruebas que contiene el caso creado, en la lista de TEST CASE ubicada al lado izquierdo de la ventana, se hace clic derecho sobre Untitled Test Suite, y se selecciona la opción Save Test Suite As... 


Luego, solo basta con elegir la ubicación donde se desea guardar, y el nombre del archivo.



Cabe notar que el archivo generado es un HTML, el cual contiene la descripción del conjunto de pruebas y los casos grabados, y puede ser visualizado desde cualquier navegador.


Esto es todo por el momento, para mostrar las características generales de SideeX. En ogtra oportunidad intentaré explorar más a fondo la creación de conjuntos de pruebas, con verificación de datos y todo eso, utilizando esta herramienta.

Ejemplo de aplicación web C# con ServiceStack, MongoDB y AngularJS

En esta ocasión quería compartir una aplicación web de prueba que hice hace casi 3 años. Fue una de mis primeras aplicaciones de tipo SPA (Single Page Application), y mi primer encuentro con las 3 tecnologías mencionadas, por lo que puede que tenga algunas inconsistencias. Sin embargo, podría dar una idea básica del uso de ServiceStack 3.9.71 con C#, AngularJS 1.2.16 y MongoDB (no recuerdo qué versión :P). El ejemplo fue hecho con Visual Studio 2012, usando el .NET Framework 4.5.

Este es el enlace del repositorio: https://github.com/guillegr123/sampletraders

¡Saludos, que Dios les bendiga!
Con la tecnología de Blogger.