En este artículo te enseñaremos varios métodos (desarrollados utilizando ASP.NET MVC) para leer los datos de un archivo Excel. El primer método que utilizaremos es mediante el uso de ExcelDataReader. El segundo método es un poco más complicado, para ello utilizaremos LinqToExcel. Este truco puede ser útil para los desarrolladores intermedios que tienen algunos conceptos básicos en C #, .NET y HTML.
Antes de comenzar la explicación de los ejemplos, vamos a hablar un poco sobre los archivos Excel.
Archivos de Microsoft Excel
Los archivos de Microsoft Excel son hojas de cálculo desarrolladas por Microsoft. Cuenta con herramientas de cálculo, herramientas gráficas y lenguaje de micro-programación utilizando Visual Basic para desarrollar aplicaciones (VBA)
Esto es un ejemplo de un archivo Excel
Para el buen entendimiento de los próximos ejemplos, debes saber acerca de las pestañas. Las pestañas de Excel cumplen la función de una hoja de cálculo dentro del cómputo que puede tener un archivo de Excel.
Utilizando ExcelDataReader
Esta librería me fue muy útil, cuando alojé mi proyecto web en Windows Azure usando LinqToExcel e intentando parsear los datos de Excel, obtuve el siguiente mensaje de error: "Error Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine". Para hacer frente a este bug, cambie LinqToExcel a ExcelDataReader y no cambié nada más en mi código.
ExcelDataReader es cross-platform y no depende ni de Office ni de Ace. El único requerimiento de utilizar ExcelDataReader a tu proyecto es que tienes que utilizar sus referencias.
public IEnumerable Method1(string fileSrc, string worksheet) { //Reading excel data using ExcelDataReader var excelData = new ExcelData(fileSrc); //Get data from specified worksheet var query = excelData.getData(worksheet); int cp = 0; //intialize the result list var list = new List(); foreach (var line in query) { try { var surname = line[0].ToString();//surname var name = line[1].ToString();//name var date = line[2].ToString();//custom date format list.Add(new Person(surname, name, date)); } catch (Exception exception) { ; } } return list.AsEnumerable(); }
Utilizando LinqToExcel
En este ejemplo, utilizaremos LinqToExcel para parsear un archivo Excel. Añade la librería de LinqToExcel a las referencias de tu proyecto para ello (puedes usar paquetes Nuget).
public IEnumerable Method2(string fileSrc, string worksheet) { //Reading excel data using LinqToExcel var excelData = new ExcelQueryFactory(fileSrc); //Get data from specified worksheet var query = excelData.Worksheet(worksheet); int cp = 0; //intialize the result list var list = new List(); foreach (var line in query) { try { var surname = line[0].ToString();//surname var name = line[1].ToString();//name var date = line[2].ToString();//date list.Add(new Person(surname, name, date)); } catch (Exception exception) { ; } } return list.AsEnumerable(); }
Código Extra para los dos métodos
1. Código HTML
<div class="row">
<div class="col-lg-12">
<form class="form" method="POST" action="/Home/Index">
<div class="form-group">
<label>Choose a method :</label>
<br>
<input type="radio" name="method"
value="0" checked /> Method 1 : ExcelDataReader <br>
<input type="radio" name="method"
value="1" /> Method 2 : LinqToExcel
</div>
<div class="form-group">
<label>Choose a worksheet :</label>
<br>
<input type="radio" name="worksheet"
value="worksheet 1" checked /> Worksheet 1<br>
<input type="radio" name="worksheet"
value="Worksheet 2" /> Worksheet 2
</div>
<div class="form-group">
<input type="submit"
class="form-control btn btn-default" value="Start parsing" />
</div>
</form>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg-12">
<label>Parsing result :</label>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<table class="table">
@if (@Model != null)
{
@Html.Raw("<thead><th>SurName</th>
<th>Name</th><th>Date</th></thead><tbody>");
foreach (var elem in @Model as IEnumerable<WebApplicationReadingCSVFile.Models.Person>)
{
@Html.Raw("<tr><td>" + @elem.SurName +
"</td><td>" + @elem.Name +
"</td><td>" + @elem.Date +
"</td></tr>");
}
@Html.Raw("</tbody>");
}
</table>
</div>
<div class="col-sm-8"></div>
</div>
2. Código C# ASP.NET MVC
Class Person: Contiene los campos de registro
public class Person { public string SurName { get; set; } public string Name { get; set; } public string Date { get; set; } public Person(string surName, string name, string date) { this.SurName = surName; this.Name = name; this.Date = date; } }
Action Index: Es el punto de entrada de los métodos de parseo
public ActionResult Index() { //get the selected radio value string method = Request.Params["method"]; string worksheet = Request.Params["worksheet"]; //initialize list IEnumerable list = new List(); if (worksheet != null && method != null && method != "") { //Get Server Path of Excel file string fileSrc = Server.MapPath("~/Content/Files/ExcelFile.xlsx"); //Build Result if (method == "0") { //call the first Method list = Method1(fileSrc, worksheet); } else { //call the second Method list = Method2(fileSrc, worksheet); } } //return list as Enumerable to our model return View(list); }
Y este ha sido el artículo en el que trataba explicaros cómo crear un global .gitignore, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!