none
¿ Como exportar el resultado de un procedimiento almacenado a excel utilizando ASP.NET MVC ? RRS feed

  • Pregunta

  • Buen día,

    tengo construido un sitio en MVC ASP.NET, en la cual cargo listas producto de procedimientos almacenados en mi base de datos, en este momento requiero de poder crear un botón que me descargue a excel el contenido de las lista.

    como podría hacer esto?

    agradezco la colaboración.

    viernes, 17 de junio de 2016 21:44

Respuestas

  • Una primera solución no muy elegante pero sí muy sencilla consiste en generar una tabla en HTML desde tu aplicación MVC y luego enviarle ese HTML al Excel, que se lo "traga" y lo muestra como si fueran filas y columnas en una hoja de cálculo. Para ello en MVC haces un método de acción que tenga un return File y en el tipo MIME le pasas el de Excel y en el contenido le pones los bytes del html. El inconveniente que tiene esto es que las versiones modernas de Excel le presentan un aviso al usuario diciendo que el tipo de datos recibido es incorrecto, pero si ignoras el warning y dejas que abra los datos, salen bien.

    Si quieres algo más elegante, que genere un .xlsx de verdad, puedes usar la librería OpenXML (descarga gratuita desde Microsoft) y enviarle comandos para ir metiendo en las celdas los valores deseados. Inconveniente: curva de aprendizaje muy empinada (es difícil aprender a manejar OpenXML).

    Otra alternativa: usar un sistema de reportes (puede ser un .rdlc junto con un ReportViewer), meter tus datos en un reporte (que no tiene por qué hacerse visible en pantalla en ningún momento), y pedirle por programación que lo exporte en formato Excel.

    Otra más: Usar el Driver de OleDb para Excel, insertar los datos como si fuera una base de datos, y el resultado es que el OleDb los escribe en el .xls en forma de hoja de cálculo. Inconveniente: si no me equivoco, solo hay versión de este driver para 32 bits, no existe en 64 bits.

    • Marcado como respuesta Jeff M Quintero viernes, 24 de junio de 2016 15:38
    sábado, 18 de junio de 2016 6:19