Estoy buscando una clase para crear archivos CSV Excel.
Características esperadas:
- Extremadamente simple de usar
- Se escapa de comas y citas para que Excel las maneje bien
- Exporta la fecha y la hora en formato a prueba de zona horaria
¿Conoces alguna clase capaz de esto?
Respuestas:
Versión ligeramente diferente que escribí usando la reflexión para mis necesidades. Tuve que exportar una lista de objetos a csv. En caso de que alguien quiera usarlo para el futuro.
Muestra de uso: (actualizado por comentario)
fuente
public string Export()
método y cambiar el otro método apublic string Export(bool includeHeaderLiner = true)
(con un valor de parámetro predeterminado)? De nuevo, no estoy seguro de si los parámetros predeterminados estaban disponibles en 2011, pero el código actual me parece poco ortodoxo.Por favor perdoname
Pero creo que un repositorio público de código abierto es una mejor manera de compartir código y hacer contribuciones, correcciones y adiciones como "Arreglé esto, arreglé eso"
Así que hice un repositorio git simple con el código de inicio del tema y todas las adiciones:
https://github.com/jitbit/CsvExport
También agregué un par de soluciones útiles. Todos pueden agregar sugerencias, bifurcarlo para contribuir, etc., etc. etc. Envíenme sus tenedores para que los fusione nuevamente en el repositorio.
PD. Publiqué todos los avisos de copyright para Chris. @ Chris si estás en contra de esta idea, avísame, la mataré.
fuente
Otra buena solución para leer y escribir archivos CSV es filehelpers (código abierto).
fuente
¿Qué tal usar string.Join en lugar de todos los bucles foreach?
fuente
String.Join("," , List<string>)
Funciona también.Si a alguien le gustaría, convertí esto a un método de extensión en IEnumerable:
fuente
Gran trabajo en esta clase. Simple y fácil de usar. Modifiqué la clase para incluir un título en la primera fila de la exportación; pensé que compartiría:
utilizar:
clase:
fuente
hay una biblioteca de código abierto para CSV que puede obtener usando nuget: http://joshclose.github.io/CsvHelper/
fuente
Agregué ExportToStream para que el csv no tuviera que guardar primero en el disco duro.
fuente
he añadido
El código anterior no funciona con versiones antiguas de .NET. Para la versión 3.5 de framework, use esta otra versión:
fuente
¡Muchas gracias por eso! Modifiqué la clase a:
MakeValueCsvFriendly
Código:
fuente
También puede usar ADO para hacer esto: http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx
fuente
La clase original tiene un problema, y es que si desea agregar una nueva columna, recibirá KeyNotFoundException en el método Exportar. Por ejemplo:
Para resolver esto, y usando la idea @KeyboardCowboy de usar la reflexión, modifiqué el código para permitir agregar filas que no tienen las mismas columnas. Puede usar instancias de clases anónimas. Por ejemplo:
Puede descargar el código fuente aquí CsvExporter . Siéntase libre de usar y modificar.
Ahora, si todas las filas que desea escribir son de la misma clase, creé la clase genérica CsvWriter.cs , que tiene un mejor uso de RAM de rendimiento e ideal para escribir archivos grandes. Además, le permite agregar formateadores al tipo de datos que desee . Un ejemplo de uso:
fuente
Solo necesita 1 función para hacer esto. Solo tiene que hacer es crear una carpeta en su explorador de soluciones y almacenar el archivo csv allí y luego exportar ese archivo al usuario.
Como en mi caso tengo una carpeta de descargas. Primero exporto todo mi contenido a ese directorio y luego lo exporto al usuario. Para el manejo de respuesta y finalización, utilicé ThreadAbortException. Por lo tanto, es una función 100% genuina y funcional en mi solución.
fuente