Exportar a Excel un desde un List con C# utilizando EPPlus

Mi primer intento fue utilizando el GridView

El problema es que obtenía este error:
“The file you are trying to open, ‘recibos.xls’ is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?”

Por curiosidad vi en un editor de texto el contenido del fichero y resulta que contenía código Html.

En un post maravilloso de Matías López https://matiaslopezdev.wordpress.com/2014/04/22/trabajando-con-excel-en-net/ indica las posibilidades y cual consideraba la mejor.

Como recomendaba utilice la librería EPPlus, funciona realmente bien y es bastante sencilla.

Solo necesite utilizar estas, hay muchísimas más posibilidades, incrustar gráficos, imágenes, crear varias hojas ..etc

6 pensamiento sobre “Exportar a Excel un desde un List con C# utilizando EPPlus

  1. unseo1989udenis

    Holas, , eh revisado tu post, y necesito que al hacer clic en un boton, me exporte a excel, en el controlador eh puesto de esta manera, pero sale error, no se si sea la manera correcta, cabe mencionar que instale la libbreria.Por favor alguna idea, gracias.

    Pongo el código, que pues en el controlador:

    public void ExportToExcel_formulario(Stream stream)
    {
    // gv.DataSource = db.formulario.ToList();
    var recibosexcel = from cust in db.formulario
    select cust;
    using (var excelPackage = new ExcelPackage())
    {
    //Propiedades del archivo
    excelPackage.Workbook.Properties.Author = “Masanasa “;
    excelPackage.Workbook.Properties.Title = ” Exportación Recibos”;
    //Propiedades Hoja de excel
    var sheet = excelPackage.Workbook.Worksheets.Add(“recibos”);
    sheet.Name = “Recibos”;
    //Empezamos a escribir sobre ella.
    var rowindex = 1;
    //Hago un Merge de primeras 4 columnas para poner el titulo.
    sheet.Cells[1, 1].Value = “LISTADO RECIBOS “;
    sheet.Cells[1, 1, 1, 4].Merge = true;
    //Se puede poner un comentario en una celda
    sheet.Cells[1, 1].AddComment(“Listado de recibos”, “Masanasa”);
    rowindex = 3;
    //Pongo los encabezados del excel
    var col = 1;
    sheet.Cells[rowindex, col++].Value = “Mes”;
    sheet.Cells[rowindex, col++].Value = “Año”;
    sheet.Cells[rowindex, col++].Value = “Nº Recibo”;
    sheet.Cells[rowindex, col++].Value = “Total”;
    rowindex = 4;
    //Recorro los recibos y los ponemos en el Excel
    foreach (var r in recibosexcel)
    {
    col = 1;
    sheet.Cells[rowindex, col++].Value = r.titulo;
    rowindex++;
    }
    // Ancho de celdas
    sheet.Cells.AutoFitColumns();

    //Establezco diseño al excel utilizando un diseño predefinido
    var range = sheet.Cells[3, 1, rowindex, 4];
    var table = sheet.Tables.Add(range, “tabla”);
    table.TableStyle = TableStyles.Dark9;

    //Ya lo tengo ahora lo devuelvo utilizo el Response porque es Web, sino puedes guardarlo directamente
    Response.ClearContent();
    Response.BinaryWrite(excelPackage.GetAsByteArray());
    Response.AddHeader(“content-disposition”, “attachment;filename=recibos.xlsx”);
    Response.ContentType = “application/excel”;
    Response.Flush();
    Response.End();
    }

    }

    el error, al ejecutar el boton exportar a excel.
    ———————————————————

    Error de servidor en la aplicación ‘/’.

    No se puede crear una clase abstract.

    Contestar
    1. MasanasaNotas Autor del artículo

      Hola Erika

      Es sencillo para crear cada hoja debes usar excelPackage.Workbook.Worksheets.Add
      En el ejemplo tienes creada la hoja Recibos
      var sheet = excelPackage.Workbook.Worksheets.Add(“recibos”);
      sheet.Name = “Recibos”;
      Puedes crear otra por ejemplo para clientes
      var sheet2 = excelPackage.Workbook.Worksheets.Add(“clientes”);
      sheet2.Name = “Clientes”;

      Espero que te ayude.

      Contestar
  2. Cesar Reyes

    Hola Aplique tu ejemplo pero los resultados de mi lista, me aparecen 4 filas abajo de mi encabezado y no puedo identificar por que crees poder orientarme

    Contestar

Deja un comentario

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