Estou procurando uma classe para criar arquivos CSV Excel.
Recursos esperados:
- Extremamente simples de usar
- Escapa vírgulas e aspas para que o Excel lide com elas
- Exporta data e horas no formato à prova de fuso horário
Você conhece alguma classe capaz disso?
Respostas:
Versão ligeiramente diferente que escrevi usando a reflexão para minhas necessidades. Eu tive que exportar uma lista de objetos para CSV. Caso alguém queira usá-lo para o futuro.
Exemplo de uso: (atualizado por comentário)
fonte
public string Export()
método e alterar o outro método parapublic string Export(bool includeHeaderLiner = true)
(com um valor de parâmetro padrão). Novamente, não tenho certeza se os parâmetros padrão estavam disponíveis em 2011, mas o código atual apenas parece ortodoxo para mim.Por favor me perdoe
Mas acho que um repositório público de código aberto é a melhor maneira de compartilhar código e fazer contribuições, correções e acréscimos como "eu consertei isso, consertei aquilo"
Então, eu criei um repositório git simples com o código do iniciador de tópicos e todas as adições:
https://github.com/jitbit/CsvExport
Também adicionei algumas correções úteis. Todo mundo poderia adicionar sugestões, fazer uma bifurcação para contribuir, etc.
PS. Publiquei todos os avisos de direitos autorais para Chris. @ Chris, se você é contra essa idéia - me avise, eu mato.
fonte
Outra boa solução para ler e gravar arquivos CSV é o filehelpers (código aberto).
fonte
Que tal usar string.Join em vez de todos os Loops foreach?
fonte
String.Join("," , List<string>)
funciona também.Se alguém quiser eu converti isso para um método de extensão no IEnumerable:
fonte
ótimo trabalho nessa aula. Simples e fácil de usar. Modifiquei a classe para incluir um título na primeira linha da exportação; achei que eu iria compartilhar:
usar:
classe:
fonte
existe uma biblioteca de código aberto para CSV que você pode obter usando o nuget: http://joshclose.github.io/CsvHelper/
fonte
Adicionei ExportToStream para que o csv não tenha que salvar primeiro no disco rígido.
fonte
eu já adicionei
O código anterior não funciona com versões antigas do .NET. Para a versão 3.5 da estrutura, use esta outra versão:
fonte
Muito obrigado por isso! Modifiquei a classe para:
MakeValueCsvFriendly
Código:
fonte
Você também pode usar o ADO para fazer isso: http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx
fonte
A classe original tem um problema e, se você quiser adicionar uma nova coluna, receberá KeyNotFoundException no método Export. Por exemplo:
Para resolver isso, e usando a ideia do @KeyboardCowboy de usar reflexão, modifiquei o código para permitir adicionar linhas que não tenham as mesmas colunas. Você pode usar instâncias de classes anônimas. Por exemplo:
Você pode baixar o código fonte aqui CsvExporter . Sinta-se livre para usar e modificar.
Agora, se todas as linhas que você deseja gravar forem da mesma classe, criei a classe genérica CsvWriter.cs , que possui um melhor desempenho de uso da RAM e é ideal para gravar arquivos grandes. Além disso, permite adicionar formatadores ao tipo de dados que você deseja . Um exemplo de uso:
fonte
Você precisa de apenas 1 função para fazer isso. Só é necessário criar uma pasta no explorador de soluções e armazenar o arquivo csv lá e depois exportá-lo para o usuário.
Como no meu caso, eu tenho uma pasta de downloads. Primeiro exporto todo o meu conteúdo para esse diretório e depois o exporto para o usuário. Para o tratamento response.end, usei o ThreadAbortException. Portanto, é uma função 100% genuína e funcional na minha solução.
fonte