Estou prestes a adicionar uma seção a um aplicativo ASP.NET (VB.NET codebehind) que permitirá ao usuário obter dados retornados a eles como um arquivo Excel, que irei gerar com base nos dados do banco de dados. Embora existam várias maneiras de fazer isso, cada uma tem suas próprias desvantagens. Como você retornaria os dados? Estou procurando algo que seja o mais simples e direto possível.
asp.net
vb.net
export-to-excel
Dan Coates
fonte
fonte
Respostas:
CSV
Prós:
Contras:
HTML
Prós:
Contras:
OpenXML (Office 2007 .XLSX)
Prós:
Contras:
SpreadSheetML (formato aberto XML)
Prós:
Contras:
XLS (gerado por componente de terceiros)
Prós:
Contras:
COM Interop
Prós:
Contras:
fonte
Você pode gerar os dados como células de tabela html, colocar uma extensão
.xls
ou.xlsx
nele e o Excel irá abri-lo como se fosse um documento nativo. Você pode até fazer alguns cálculos limitados de formatação e fórmula dessa maneira, por isso é muito mais poderoso do que CSV. Além disso, a saída de uma tabela html deve ser muito fácil de fazer em uma plataforma da web como ASP.Net;)Se precisar de várias planilhas ou planilhas nomeadas em sua pasta de trabalho do Excel, você pode fazer algo semelhante por meio de um esquema XML chamado
SpreadSheetML
. Este não é o novo formato fornecido com o Office 2007, mas algo completamente diferente que funciona desde o Excel 2000. A maneira mais fácil de explicar como funciona é com um exemplo:fonte
Se vier de um DataTable :
De um Gridview :
fonte
Este é um wrapper gratuito para SpreadML - funciona muito bem.
http://www.carlosag.net/Tools/ExcelXmlWriter/
fonte
Com base nas respostas dadas e na consulta com colegas de trabalho, parece que a melhor solução é gerar um arquivo XML ou tabelas HTML e colocá-los como anexo. A única alteração recomendada por meus colegas de trabalho é que os dados (ou seja, as tabelas HTML) podem ser gravados diretamente no objeto Response, eliminando assim a necessidade de gravar um arquivo, o que pode ser problemático devido a problemas de permissões, I / O contenção e garantindo que a limpeza programada ocorra.
Aqui está um trecho do código ... Eu não verifiquei isso ainda, e não forneci todo o código chamado, mas acho que representa bem a ideia.
fonte
como o Excel entende HTML, você pode simplesmente gravar os dados como uma tabela HTML em um arquivo temporário com uma extensão .xls, obter o FileInfo para o arquivo e explodi-lo de volta usando
se quiser evitar o arquivo temporário, você pode gravar em um fluxo na memória e gravar os bytes de volta em vez de usar WriteFile
se o cabeçalho do comprimento do conteúdo for omitido, você poderá escrever o html diretamente, mas isso pode não funcionar corretamente o tempo todo em todos os navegadores
fonte
Eu pessoalmente prefiro o método XML. Retornarei os dados do banco de dados em um Dataset, salvarei em XMl e, em seguida, crio um arquivo xslt que contém uma regra de transformação que formatará um documento adequado e uma transformação XML simples finalizará o trabalho. A melhor parte disso é que você pode formatar células, fazer formatação condicional, configurar cabeçalhos e rodapés e até mesmo definir intervalos de impressão.
fonte
Eu fiz isso algumas vezes e a maneira mais fácil era simplesmente retornar um arquivo CSV (Comma Separated Value). O Excel importa perfeitamente e é relativamente rápido de fazer.
fonte
exportamos dados de um datagrid para o excel o tempo todo. Converter para HTML e, em seguida, gravar em um arquivo Excel
O único problema com esse método era que muitas de nossas grades tinham botões ou links, então você também precisa disso:
Descobri que em algum lugar funciona bem.
fonte
Eu recomendo o bibliotecário de geração de excel de código aberto que é baseado em OpenXML
Isso me ajudou vários meses atrás.
fonte
Aqui está um relatório que extrai de um procedimento armazenado. Os resultados são exportados para o Excel. Ele usa ADO em vez de ADO.NET e a razão pela qual esta linha é
Ele faz a maior parte do trabalho e não está disponível em ado.net.
fonte
Se você preencher um GridView com dados, você pode usar esta função para obter os dados formatados em HTML, mas indicando ao navegador é um arquivo excel.
fonte
Apenas evite a interoperabilidade COM por meio do namespace Microsoft.Office.Interop. É tão lento, não confiável e não escalonável. Não aplicável para masoquistas.
fonte
Você pode criar arquivos Excel bem formatados usando esta biblioteca, com bastante facilidade: http://officehelper.codeplex.com/documentation .
O Microsoft Office não precisa ser instalado no servidor da web!
fonte
CSV é a maneira mais fácil. Na maioria das vezes, está vinculado ao Excel. Caso contrário, você deve usar as APIs de automação ou o formato XML. As APIs e XML não são tão difíceis de usar.
Informações sobre como gerar XML para Excel
fonte
Eu opto pelo CSV (conforme descrito acima) ou, com mais frequência atualmente, uso o Infragistics NetAdvantage para gerar o arquivo. (Na grande maioria das vezes em que o Infragistics está em jogo, estamos apenas exportando um UltraWebGrid existente, que é essencialmente uma solução de um LOC, a menos que ajustes extras de formatação sejam necessários. Também poderíamos gerar manualmente um arquivo Excel / BIFF, mas raramente é necessário.)
fonte
cara, em .net eu acho que você poderia ter um componente que pudesse fazer isso, mas no asp clássico eu já fiz isso criando uma tabela html e alterando o tipo de mime da página para vnd / msexcel. Eu acho que se você usar um gridview e mudar o tipo MIME talvez funcione, porque o gridview é uma tabela html.
fonte
A única maneira à prova de balas de evitar os triângulos verdes "Parece que esses números estão armazenados como texto" é usar o formato Open XML. Vale a pena usá-lo, apenas para evitar os inevitáveis triângulos verdes.
fonte
O melhor método que vi para relatórios do Excel é escrever os dados em XML com uma extensão XML e transmiti-los aos clientes com o tipo de conteúdo correto. (aplicativo / xls)
Isso funciona para qualquer relatório que requeira formatação básica e permite que você compare com planilhas existentes usando ferramentas de comparação de texto.
fonte
Supondo que isso seja para uma intranet, onde você pode definir permissões e comandar o IE, você pode gerar o lado do cliente da pasta de trabalho com JScript / VBScript conduzindo o Excel . Isso fornece a formatação nativa do Excel, sem o incômodo de tentar automatizar o Excel no servidor.
Não tenho certeza se realmente recomendaria mais essa abordagem, exceto em cenários de nicho, mas era bastante comum durante o apogeu clássico do ASP.
fonte
Claro, você sempre pode ir para componentes de terceiros. Pessoalmente, tive uma boa experiência com Spire.XLS http://www.e-iceblue.com/xls/xlsintro.htm
O componente é muito fácil de usar em seu aplicativo:
fonte
Um dos problemas que encontrei ao usar uma das soluções sugeridas acima, que são semelhantes a esta resposta, é que se você enviar o conteúdo como um anexo (o que descobri ser a solução mais limpa para navegadores não-MS) , em seguida, abra-o no Excel 2000-2003, seu tipo é uma "Página da Web do Excel" e não um documento nativo do Excel.
Em seguida, você deve explicar aos usuários como usar "Salvar como tipo" no Excel para convertê-lo em um documento do Excel. Isso é uma dor se os usuários precisam editar este documento e, em seguida, carregá-lo novamente em seu site.
Minha recomendação é usar CSV. É simples e se os usuários o abrirem de dentro do Excel, o Excel pelo menos solicita que salvem em seu formato nativo.
fonte
Gostaria apenas de criar um arquivo CSV com base nos dados, porque vejo isso como o mais limpo, e o Excel tem um bom suporte para isso. Mas se você precisar de um formato mais flexível, tenho certeza de que existem algumas ferramentas de terceiros para gerar arquivos Excel reais.
fonte
Aqui está uma solução que transmite a tabela de dados como um CSV. Rápido, limpo e fácil, e lida com vírgulas na entrada.
fonte
acabei de criar uma função para exportar de um formulário web C # para o Excel, espero que ajude outras pessoas
fonte
Se você tiver que usar o Excel em vez de um arquivo CSV, precisará usar a automação OLE em uma instância do Excel no servidor. A maneira mais fácil de fazer isso é ter um arquivo de modelo e preenchê-lo programaticamente com os dados. Você o salva em outro arquivo.
Dicas:
Algumas das abordagens de 'usar tipos MIME para enganar o Excel para que ele abra uma tabela HTML' funcionariam se você não se importasse com o formato do arquivo um pouco básico. Essas abordagens também transferem o trabalho pesado da CPU para o cliente. Se você deseja um controle refinado sobre o formato da planilha, provavelmente terá que usar o próprio Excel para gerar o arquivo conforme descrito acima.
fonte