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.

Related Articles

3 comentarios:

Con la tecnología de Blogger.