Estoy a punto de agregar una sección a una aplicación ASP.NET (código subyacente de VB.NET) que permitirá a un usuario obtener datos devueltos como un archivo de Excel, que generaré en función de los datos de la base de datos. Si bien hay varias formas de hacer esto, cada una tiene sus propios inconvenientes. ¿Cómo que devolver los datos? Estoy buscando algo que sea lo más limpio y sencillo posible.
asp.net
vb.net
export-to-excel
Dan Coates
fuente
fuente
Respuestas:
CSV
Pros:
Contras:
HTML
Pros:
Contras:
OpenXML (Office 2007 .XLSX)
Pros:
Contras:
SpreadSheetML (formato XML abierto)
Pros:
Contras:
XLS (generado por un componente de terceros)
Pros:
Contras:
Interoperabilidad COM
Pros:
Contras:
fuente
Puede generar los datos como celdas de una tabla html, pegarle una extensión
.xls
o.xlsx
, y Excel lo abrirá como si fuera un documento nativo. Incluso puede hacer algunos cálculos de formato y fórmulas limitados de esta manera, por lo que es mucho más poderoso que CSV. Además, generar una tabla html debería ser bastante fácil de hacer desde una plataforma web como ASP.Net;)Si necesita varias hojas de trabajo u hojas de trabajo con nombre dentro de su libro de Excel, puede hacer algo similar a través de un esquema XML llamado
SpreadSheetML
. Este no es el nuevo formato que se envió con Office 2007, sino algo completamente diferente que funciona desde Excel 2000. La forma más fácil de explicar cómo funciona es con un ejemplo:fuente
Si viene de un DataTable :
Desde Gridview :
fuente
Esta es una envoltura gratuita de SpreadML; funciona muy bien.
http://www.carlosag.net/Tools/ExcelXmlWriter/
fuente
Según las respuestas dadas y la consulta con los compañeros de trabajo, parece que la mejor solución es generar un archivo XML o tablas HTML y colocarlo como un archivo adjunto. El único cambio recomendado por mis compañeros de trabajo es que los datos (es decir, las tablas HTML) se pueden escribir directamente en el objeto Respuesta, eliminando así la necesidad de escribir un archivo, que puede ser problemático debido a problemas de permisos, E / S contención y garantizar que se produzca la purga programada.
Aquí hay un fragmento del código ... No lo he comprobado todavía y no he proporcionado todo el código llamado, pero creo que representa bien la idea.
fuente
Dado que Excel entiende HTML, puede escribir los datos como una tabla HTML en un archivo temporal con una extensión .xls, obtener FileInfo para el archivo y devolverlo usando
si desea evitar el archivo temporal, puede escribir en un flujo en memoria y volver a escribir los bytes en lugar de usar WriteFile
Si se omite el encabezado de longitud del contenido, puede escribir el html directamente, pero es posible que esto no funcione correctamente todo el tiempo en todos los navegadores.
fuente
Personalmente prefiero el método XML. Devolveré los datos de la base de datos en un conjunto de datos, los guardaré en XMl, luego creo un archivo xslt que contiene una regla de transformación que formateará un documento adecuado, y una transformación XML simple terminará el trabajo. La mejor parte de esto es que puede formatear celdas, hacer formateo condicional, configurar encabezados y pies de página, e incluso establecer rangos de impresión.
fuente
He hecho esto un par de veces y cada vez la forma más fácil era simplemente devolver un archivo CSV (valores separados por comas). Excel lo importa perfectamente y es relativamente rápido de hacer.
fuente
exportamos datos de una cuadrícula de datos para sobresalir todo el tiempo. Convertirlo a HTML y luego escribir en un archivo de Excel
El único problema con este método fue que muchas de nuestras cuadrículas tenían botones o enlaces, por lo que también necesita esto:
Encontré que en alguna parte funciona bien.
fuente
Recomiendo la biblioteca gratuita de generación de Excel de código abierto que se basa en OpenXML
Me ayudó hace varios meses.
fuente
Aquí hay un informe que se extrae de un procedimiento almacenado. Los resultados se exportan a Excel. Utiliza ADO en lugar de ADO.NET y la razón por la que esta línea es
Hace la mayor parte del trabajo y no está disponible en ado.net.
fuente
Si llena un GridView con datos, puede usar esta función para obtener los datos en formato HTML, pero indicando al navegador que es un archivo de Excel.
fuente
Simplemente evite COM Interop a través del espacio de nombres Microsoft.Office.Interop. Es tan malditamente lento, poco confiable e inescalable. No aplica para masoquistas.
fuente
Puede crear archivos de Excel con un formato agradable utilizando esta biblioteca, con bastante facilidad: http://officehelper.codeplex.com/documentation .
¡Microsoft Office no necesita estar instalado en el servidor web!
fuente
CSV es la forma más sencilla. La mayoría de las veces está vinculado a Excel. De lo contrario, debe utilizar las API de automatización o el formato XML. Las API y XML no son tan difíciles de usar.
Información sobre la generación de XML para Excel
fuente
O sigo la ruta CSV (como se describe arriba), o más a menudo en estos días, uso Infragistics NetAdvantage para generar el archivo. (La gran mayoría de las veces en las que Infragistics está en juego, solo estamos exportando un UltraWebGrid existente, que es esencialmente una solución de un LOC a menos que se necesiten ajustes de formato adicionales. También podríamos generar manualmente un archivo Excel / BIFF, pero rara vez es necesario.)
fuente
hombre, en .net supongo que podría tener un componente que pudiera hacer eso, pero en el asp clásico ya lo hice creando una tabla html y cambiando el tipo de mime de la página a vnd / msexcel. Supongo que si usa una vista de cuadrícula y cambia el tipo de mime, tal vez debería funcionar, porque la vista de cuadrícula es una tabla html.
fuente
La única manera infalible de evitar los triángulos verdes "Parece que estos números se almacenan como texto" es utilizar el formato Open XML. Vale la pena usarlo, solo para evitar los inevitables triángulos verdes.
fuente
El mejor método que he visto para los informes de Excel es escribir los datos en XML con una extensión XML y transmitirlos a los clientes con el tipo de contenido correcto. (aplicación / xls)
Esto funciona para cualquier informe que requiera un formato básico y le permite comparar con hojas de cálculo existentes mediante el uso de herramientas de comparación de texto.
fuente
Suponiendo que esto es para una intranet, donde puede establecer permisos y exigir IE, puede generar el lado del cliente del libro de trabajo con JScript / VBScript conduciendo Excel . Esto le brinda formato nativo de Excel, sin la molestia de intentar automatizar Excel en el servidor.
No estoy seguro de si recomendaría realmente este enfoque, excepto en escenarios bastante específicos, pero era bastante común durante el apogeo de ASP clásico.
fuente
Por supuesto, siempre puede optar por componentes de terceros. Personalmente, he tenido una buena experiencia con Spire.XLS http://www.e-iceblue.com/xls/xlsintro.htm
El componente es bastante fácil de usar dentro de su aplicación:
fuente
Uno de los problemas con los que me he encontrado al usar una de las soluciones sugeridas anteriormente, que son similares a esta respuesta, es que si envía el contenido como un archivo adjunto (lo que he encontrado es la solución más limpia para navegadores que no son de MS) , luego ábralo en Excel 2000-2003, su tipo es una "Página Web de Excel" y no un documento nativo de Excel.
Luego, debe explicar a los usuarios cómo usar "Guardar como tipo" desde Excel para convertirlo en un documento de Excel. Esto es una molestia si los usuarios necesitan editar este documento y luego volver a subirlo a su sitio.
Mi recomendación es utilizar CSV. Es simple y si los usuarios lo abren desde Excel, Excel al menos les pide que lo guarden en su formato nativo.
fuente
Simplemente crearía un archivo CSV basado en los datos, porque lo veo como el más limpio y Excel tiene un buen soporte para él. Pero si necesita un formato más flexible, estoy seguro de que existen algunas herramientas de terceros para generar archivos de Excel reales.
fuente
Aquí hay una solución que transmite la tabla de datos como un CSV. Rápido, limpio y fácil, y maneja comas en la entrada.
fuente
acabo de crear una función para exportar desde un formulario web C # para sobresalir espero que ayude a otros
fuente
Si tiene que utilizar Excel en lugar de un archivo CSV, deberá utilizar la automatización OLE en una instancia de Excel en el servidor. La forma más sencilla de hacer esto es tener un archivo de plantilla y completarlo programáticamente con los datos. Lo guarda en otro archivo.
Consejos:
Algunos de los enfoques de 'usar tipos mime para engañar a Excel para que abra una tabla HTML' funcionarían si no le importa que el formato del archivo sea un poco básico. Estos enfoques también transfieren el trabajo pesado de la CPU al cliente. Si desea un control detallado sobre el formato de la hoja de cálculo, probablemente tendrá que utilizar el propio Excel para generar el archivo como se describe anteriormente.
fuente