Cómo leer un archivo Excel en ASP.NET

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!

 

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP