Leer archivos de Microsoft Excel Versión 2.0-365 en forma ligera y rápida en .Net Core

ExcelDataReader, es una biblioteca ligera y rápida escrita en C# para leer archivos de Microsoft Excel desde la versión 2.0 a la 365.

Nuestro código de Ejemplo, puede ser implementado tanto en C# y VB, en sus versiones Escritorio o Web, realizando mínimos cambios.

La versión vigente al momento de realizar este articulo es la 3.4.0, cabe aclarar que la documentación de su repositorio en GitHub no se encontraba actualizada con los últimos cambios, en su recién actualizada implementación.

 

Formatos y versiones de archivos admitidos


Esta compacta y poderosa biblioteca tiene la capacidad de trabajar con los siguientes formatos y versiones de archivos:

File Type Container Format File Format Excel Version(s)
.xlsx ZIP, CFB+ZIP OpenXml 2007 y superior
.xls CFB BIFF8 97, 2000, XP, 2003
98, 2001, v.X, 2004 (Mac)
.xls CFB BIFF5 5.0, 95
.xls BIFF4 4.0
.xls BIFF3 3.0
.xls BIFF2 2.0, 2.2
.csv CSV (todos)

Aunque en la documentación no se ve reflejado explicito el uso en versiones superiores a 2007, en mi experiencia personal lo he implementado en Office 365, 2016 y 2010, con excelentes resultados.

Los formatos de Excel 2007 en adelante implementan el uso de archivos Office Open XML (también llamado OOXML u OpenXML) es un formato de archivo abierto y estándar cuyas extensiones más comunes son .docx.xlsx y .pptx. Se le utiliza para representar y almacenar hojas de cálculo, gráficas, presentaciones y documentos de texto. Un archivo Office Open XML contiene principalmente datos basados en el lenguaje de marcado XML, comprimidos en un contenedor .zip específico. Es por esta razón que los archivos Excel .xlsx 2007, 2010, 2013, 2016 y 365 son tratados de igual manera, por ser escritos y almacenados bajo el mismo estándar.

 

Instalación


Puedes instalarlo de dos maneras, una es utilizar el “Instalador de Paquetes de Visual Studio, Consola Administradora de Paquetes” (VS Package Manager Console Install-Package <package>) o en su defecto con el Gestor de Extensiones el “Visual Studio Manage NuGet Packages” (te recomendamos NuGet)

Como una de sus ultimas mejoras a partir de la versión 3.0, el proyecto esta dividido en varios Paquetes, para su mantenimiento y mejora continua.

Su paquete base es ExcelDataReader para usar la interfaz del lector de “bajo nivel”. Compatible con net20, net45, netstandard1.3 y netstandard2.0.

Existe dos métodos de implementarlo y su uso, el básico que es utilizando el método Reader() y el segundo es el método Extensible AsDataSet(). Nosotros trabajaremos con el que a mi parecer ha sido siempre el mas sencillo de usar, para nuestro ejemplo requerimos instalar el paquete de extensión ExcelDataReader.DataSet para usar el método AsDataSet() para llenar un System.Data.DataSet. El proceso de instalación también incluirá el paquete base ExcelDataReader en su proceso de instalación.

Pasos (manage NuGet)

  1. Después de crear un Proyecto o solución Nuevo, ya sea este Web o de Escritorio o el de su preferencia.
  2. Haga click derecho en el raíz de su Proyecto o Solución, y seleccione “Manage NuGet”
  3. Entre los paquetes a instalar, Buscar “ExcelDataReader.DataSet

 

Comando por Consola

Los comando utilizando la Consola de Administración de Paquetes, son:

# Instalar solo ExcelDataReader
Install-Package ExcelDataReader -Version 3.4.0

# Instalar ExcelDataReader.DataSet(), 
# este a su vez incluye la dependencia a ExcelDataReader
Install-Package ExcelDataReader.DataSet -Version 3.4.0

 

Implementación


Para tener mas claro el uso de esta librería, a continuación te mostramos un ejemplo de su utilización. Utilizando un proyecto de Consola, podremos utilizar fácilmente nuestra biblioteca.

 

using ExcelDataReader;
using System.Data; 
using System.IO;

namespace ConsoleAppLAB 
{
   static void Main(string[] args) 
   {

      string filePath = @"D:/test.xlsx";&nbsp;
      stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

      // Metodo usando DataSet()
      excelReader = ExcelDataReader.ExcelReaderFactory.CreateOpenXmlReader(stream);

      // Metodo Normal mediante lectura Binaria
      // Si estas pretendiendo cargar archivos Excel ('97-2003 format; *.xls)
      // Pueden utilizar lectura binaria de archivos Excel
      //IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

      DataSet result = excelReader.AsDataSet(new ExcelDataSetConfiguration() 
      {
         ConfigureDataTable = (_) =&gt; new ExcelDataTableConfiguration() 
         { UseHeaderRow = false } 
      });

      // En la variable "result" se encuentran nuestros datos (Archivo Excel)
      // Donde cada Hoja de nuestro Excel es depositada en un DataTable
      // y las celdas quedan almacenados como Columnas y Filas, tal cual tabla

      excelReader.Close();
   }
}

 

A continuación una captura de pantalla de un archivo Excel, que contiene diferentes formatos y características típicas, que he utilizado como plantilla para los usuarios finales y que he Cargado con esta biblioteca.

Cargar Archivo Excel desde C# o VB rápido

Cargar Archivo Excel desde C# o VB

 

Recomendaciones


Esta biblioteca es muy practica y sencilla en su utilización, y gracias a la extensión para DataSet, nos permite poder utilizarla virtualmente en lo que nosotros deseemos, como es asociarla a un Grid y mostrarlo en pantalla, almacenarlos en una base de datos, pasarlos como referencia en un reporte, manipularlos y hacer consultar, etc.

Utilizarlo en la carga de Registros Masivos

Si pretendes utilizarlo para hacer la carga de Registros Masivos (ejemplo: superior a 1k filas), te Recuerdo que este archivo es cargado en memoria (del lado del cliente), y esto afectara directamente en el rendimiento de tu aplicación. El objetivo de esta biblioteca es el poder leer y manipular la información contenida en un Excel, NO de servir como un Cargador MASIVO de Registros, como lo que algunos programadores erróneamente hacen.

Como una buena practica seria cargar un .CSV que es un formato mas ligero y plano, y pasar a almacenar la información en una tabla de Uso Temporal (sin triggers, Check Constraint o Identity), posteriormente realizar la manipulación y validación respectiva. Otra técnica recomendable seria utilizar funcionalidades como Bulk de Oracle, para cargas Masivas de registros.

 

Si tienes problemas para su implementación, o encuentras algún error en nuestro código, no dudes en hacérnoslo saber, dejarnos tus comentarios si deseas también el código en su versión .VB visual basic.


links & referencias: 

Si deseas mas información o consultar las fuentes bibliográficas, aquí te dejamos…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *