none
Exportar a excel desde table html c# con ado.net y MVC RRS feed

  • Pregunta

  • Hola dev, espero que esten bien, mi consulta es la siguiente, tengo un proyecto sobre hidroelectrica, tengo mi archivo.cshtml, en ese archivo tengo una tabla html con datos que me traigo desde la base de datos, pero esos datos quiero exportarlos a un archivo excel, alguien me orienta como puedo hacerlo.


    viernes, 3 de febrero de 2017 19:46

Todas las respuestas

  • Hay dos opciones: Hacerlo bien hecho, o hacer una chapuza fácil y  rápida. La fácil y rápida consiste en servir al navegador la misma tabla en HTML (pero quitándole todo lo que la rodee como cabeceras, menús etc.), y poner en las cabeceras HTTP que el tipo de dato que devuelves es Excel (aunque en realidad estés devolviendo HTML). Esto "engaña" al navegador, que abre el Excel y le pasa el HTML. Y Excel entiende el HTML y es capaz de importarlo y visualizarlo como si se tratase de una hoja de cálculo. El único problema es que con las versiones modernas de Excel sale en pantalla un aviso diciendo que el tipo de datos recibido no es el que esperaba, pero puedes cerrar el mensaje de aviso y te muestra bien los datos.

    Si lo quieres hacer bien hecho, tienes que remontarte más atrás. Olvídate de la tabla HTML y vete a la estructura en memoria en la que tenías los datos que usaste para generar la tabla HTML. Recorre esa estructura mediante programación, y ve pasando los datos a alguna librería que sepa generar el resultado en forma de .xls o .xlsx, y finalmente devuelve el binario generado con un FileResult desde el método de acción. La forma exacta de llamar a la librería depende de cuál sea la librería elegida. Podrías usar OpenXml si no quieres salirte de los productos de Microsoft, pero esta librería es bastante compleja; a lo mejor te merece la pena usar algún producto de terceros.


    Editado: Otra opción: Añade al programa un informe .rdlc que presente los mismos datos que ya tienes obtenidos desde la base de datos. Presenta el informe en un ReportViewer (no hay ReportViewer para MVC, pero funciona bien si añades un .aspx al proyecto MVC y le metes dentro el ReportViewer). En pantalla, el informe se mostrará como HTML, pero el ReportViewer tiene un botoncito para "Exportar" que te permite salvar el informe en varios formatos, entre los que se encuentra Excel.
    viernes, 3 de febrero de 2017 20:34
  • hola

    el cshtml no se exporta a excel, sino que lo haras directo de los datos

    para esto usarias librerias como ser

    closedxml

    enviando la respuesta como un FileResult del action para la descarga

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Marvin E. Pineda miércoles, 10 de octubre de 2018 16:35
    lunes, 6 de febrero de 2017 14:38
  • Hola Leandro, gusto el saludarte...  por favor apoyame, por que tambièn quiero hacer lo mismo, tengo el siguiente codigo:

     //Obtengo los datos de la BD
                    ListarAcuerdo = ObjAcuerdoComercialLogic.ListarGrilla(ObjAcuerdoComercial);

                    var stream = new MemoryStream();
                    var serialicer = new XmlSerializer(typeof(List<AcuerdoComercial>));


                    ////Lo transformo en un XML y lo guardo en memoria
                    serialicer.Serialize(stream, ListarAcuerdo);
                    stream.Position = 0;

                    ////devuelvo el XML de la memoria como un fichero .xls
                    return File(stream, "application/vnd.ms-excel", "AcuerdoComercialAerolinea.xls");

    Lo cuál debería de exportar mi lista a excel, pero no lo está haciendo, que me falta en mi código.

    Gracias de antemano.

    Alexander


    Alexander Daniel Perú

    miércoles, 10 de octubre de 2018 15:39