En más de las que nos gustaría ocasiones nos va tocar leer los datos de una hoja Excel en nuestra aplicación. Vamos a ver una forma rápida de conectarnos a una hoja Excel con C# y la librería ExcelDataReader.
Aparte del hecho de que habría que plantearse porque tenemos que leer una Excel y los datos no están en una DB, lo cierto es que con más frecuencia de la que nos gustaría tendremos que leer datos de una hoja Excel.
Existen muchas formas y alternativas para acceder a los datos desde una hoja Excel. En esta ocasión vamos a ver una muy sencilla de conectar una aplicación con C# y la ayuda de ExcelDataReader.
ExcelDataReader es una librería pensada para leer hojas Excel y ficheros CSV, con especial énfasis en la rapidez y la comodidad. Resulta muy práctica si únicamente tenemos que leer datos y no modificar la Excel.
Podemos agregar ExcelDataReader a nuestro proyecto desde el gestor de paquetes Nutget.
Tenemos dos formas de realizar la lectura. La más cómoda es proyectar la hoja Excel a un DataSet. Únicamente tenemos que indicar la dirección de la hoja Excel, y tendremos todos los datos cargados en el DataSet.
El DataSet cargado contiene una tabla por cada Sheet del Workbook. Cada tabla tiene las filas del Sheet, y estas a su vez las celdas de cada fila. Los datos cargados empiezan en el rango ‘A1’ y llegan hasta la última celda no vacía de la Excel.
//Ruta del fichero Excel
string filePath = "";
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
var result = reader.AsDataSet();
// Ejemplos de acceso a datos
DataTable table = result.Tables[0];
DataRow row = table.Rows[0];
string cell = row[0].ToString();
}
}
Cargar los datos en un DataSet es una opción muy cómoda y suficiente en una gran mayoría de casos. Sin embargo, tiene la desventaja de no poder funciones especiales que ExcelDataReader contiene.
Por este motivo, disponemos de una forma alternativa de leer los datos en la que se emplea un bucle para realizar la lectura, de forma muy similar a usar un SQLDataReader.
//Ruta del fichero Excel
string filePath = "";
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
do
{
while (reader.Read())
{
reader.GetDouble(0);
}
} while (reader.NextResult());
}
}
En definitiva, ExcelDataReader es una solución muy sencilla y rápida de integrar en nuestro proyecto si lo único que necesitamos es cargar datos desde una hoja Excel.
ExcelDataReader es Open Source y el código está disponible en https://github.com/ExcelDataReader/ExcelDataReader.