Importar e exportar Excel - Qual é a melhor biblioteca? [fechadas]


180

Em um de nossos aplicativos ASP.NET em C #, pegamos uma certa coleta de dados (coleção SubSonic) e exportamos para o Excel. Também queremos importar arquivos do Excel em um formato específico. Estou procurando uma biblioteca que possa usar para esse fim.

Requisitos:

  • Arquivos do Excel 2007 (O Excel 2003 suporta mais de 64k linhas? Preciso de mais do que isso.)
  • Não requer o Excel no servidor
  • Toma uma coleção digitada e, se possível, tenta colocar campos numéricos como numéricos no Excel.
  • Funciona bem com arquivos grandes (100k a 10M) - rápido o suficiente.
  • Não falha ao exportar GUIDs!
  • Não custa um upload de dinheiro (nenhuma biblioteca corporativa como a Aspose). Gratuito é sempre ótimo, mas pode ser uma biblioteca comercial.

Qual biblioteca você recomenda? Você o usou para grandes quantidades de dados? Existem outras soluções?

No momento, estou usando uma ferramenta simples que gera HTML que é carregado pelo Excel posteriormente, mas estou perdendo alguns recursos, e o Excel reclama quando o carregamos. Não preciso gerar gráficos ou algo assim, apenas exportar dados brutos.

Estou pensando em arquivos CSV simples, mas o Excel é um requisito do cliente. Eu posso trabalhar com CSV diretamente, se eu tivesse uma ferramenta para converter de e para o Excel. Como o Excel 2007 é um formato de arquivo baseado em xml (e compactado), acho que esse tipo de biblioteca deve ser fácil de encontrar. No entanto, o que mais importa para mim são seus comentários e opiniões.


Edição: Ironicamente, na minha opinião e após a resposta com mais votos, a melhor biblioteca de importação e exportação do Excel não é de exportação. Este não é o caso de todos os cenários, mas é o meu. Os arquivos XLS suportam apenas 64k linhas. XLSX suporta até 1 milhão. As bibliotecas gratuitas que eu tentei apresentam desempenho ruim (um segundo para carregar uma linha quando você tem 200 mil linhas). Não experimentei os pagos, pois sinto que eles são muito caros pelo valor que oferecem quando tudo que você precisa é de uma rotina rápida de conversão XLSX <-> CSV.


18
"Como o Excel 2007 é um formato de arquivo baseado em xml (e compactado), acho que esse tipo de biblioteca deve ser fácil de encontrar" - hah! É como dizer "O Excel 97 é baseado em bytes, portanto, esse tipo de biblioteca deve ser fácil de encontrar". XML não implica simplicidade, e OOXML é o filho-pôster de como tornar o XML subespecificado e indecifrávelmente complexo. :-)
Ken

Na verdade, você não está totalmente correto ao fazer essa suposição. Existem ferramentas disponíveis que tornam a criação de um documento OOXML bem formado pelo menos para o XLSX, muito fácil de fazer com o C # .NET.
Tipo anônimo

3
Eu criei uma proposta de site para dar a perguntas como essa uma casa oficial longe do Stack Overflow. Chama-se Code Recommendations Help para torná-lo realidade, juntando-se e fazendo perguntas agora!
Davisales 23/03

E o Spire.xls. É apenas US $ 800 para a Pro Edition. Você obtém todas as suas conversões, bem como a importação ou exportação do Excel. e-iceblue.com/Introduce/…
DotNet Programmer

O GemBox.Spreadsheet é outra solução que vale a pena conferir, super rápida e possui versões gratuita e profissional. Além disso, a versão pro é bastante barata e não possui custos ocultos de baixa qualidade para implantação, como a maioria deles.
NixonUposseen 26/11/19

Respostas:


41

Vou jogar minha mão em arquivos csv simples, mesmo que você tenha o maior controle sobre o código. Apenas certifique-se de ler as linhas e processá-las uma de cada vez (a leitura do documento até o fim e a divisão consumirão toda a sua memória - o mesmo que a escrita e a transmissão).

Sim, o usuário precisará salvar como CSV no Excel antes que você possa processá-lo, mas talvez essa limitação possa ser superada treinando e fornecendo instruções claras na página?

Por fim, ao exportar para o cliente, se você definir o tipo MIME como text / csv, o Excel geralmente será mapeado para esse tipo, para que pareça ao usuário 'um arquivo do Excel'.


4
Tentei a abordagem CSV também, mas há vários problemas com ela. Por exemplo, e se você quiser ter um texto com várias linhas em uma célula? Não consegui fazer com que o Excel importasse um CSV.
Igor Brejc

23
O CSV tem seu lugar, mas o pôster perguntou sobre o Excel, presumo que ele deva querer o Excel, não o CSV.
John Scipione

7
O CSV cai ao exportar colunas como 0345. O Excel reduz automaticamente isso para 345. O que não ajuda em nada quando esse dígito inicial é importante.
NotMe

2
A tabela HTML com uma extensão de arquivo do Excel parece funcionar muito bem ... ele analisará alguns CSS de uma maneira peculiar para coisas como formatação de várias linhas, cores e assim por diante - sem realmente precisar criar um arquivo nativo do Excel
Oskar Duveborn

3
"Salvar como"? Não. Se o cliente estiver usando o Excel, por que eles devem economizar um segundo arquivo muito mais limitado para interagir com seu produto?
mlibby

41

Eu descobri o Open XML SDK desde a minha resposta original. Ele fornece classes fortemente tipadas para objetos de planilha, entre outras coisas, e parece ser bastante fácil de trabalhar. Vou usá-lo para relatórios em um dos meus projetos. Infelizmente, a versão 2.0 não deve ser lançada até o final de 2009 ou 2010.


Muito interessante! Você o testou usando grandes quantidades de dados?
21411 Jason Kealey

Eu não fiz nenhum teste de desempenho. Analisarei principalmente gráficos e relatórios de uma página, portanto a taxa de transferência não é um problema para mim. Parece ser o mais rápido que o código gerenciado pode ser.
cdonner

1
@ Jason Kealey: esta é realmente a melhor resposta neste post - a exportação se torna irrelevante com o SpreadsheetML. Todos os dados são acessíveis de dentro do arquivo. Se você precisar dos dados em um formato diferente, forneça uma transformação via XSLT ou via Linq.
Todd Principal

1
Porém, isso não funciona para arquivos ".xls".
quillbreaker

github.com/OfficeDev/Open-XML-SDK agora é opensource e github-hospedado (I como onde MS é dirigido recentemente)
Alex

34

a nova versão do ExcelPackage está aqui http://EPPlus.codeplex.com

Ainda estou lutando com a função exportar para excel, pois meu aplicativo deve exportar alguns dados para o excel-template 2007

esse projeto parece bom para mim e o desenvolvedor responde muito bem a bugs e problemas.


3
Funciona bem, mas está licenciado sob GPL - por exemplo, qualquer software de usá-lo deve estar disponível no código fonte simples, também .... nem sempre uma boa escolha ...
marc_s

Exporte em um formato nativo que seja conveniente para você, escreva um prog. que usa o EPPlus para converter para o Excel, faça isso gratuitamente. Faça seu programa principal usar isso como padrão, mas permita outros "plugins", e pronto, seu código real é livre da GPL.

5
Parece que agora ele está licenciado sob a LGPL, então você pode usá-lo como uma biblioteca vinculada sem as restrições de copyleft.
Brad R

Observe que, se você precisar produzir um arquivo do Excel com grandes strings, esta biblioteca tenderá a produzir aleatoriamente erros de 'conteúdo ilegível' no excel.
Kevin Leigos

1
Cuidado que o EPPlus vaza memória, não é realmente bom para grandes quantidades de dados.
User3285954

18

Estou usando o ClosedXML e funciona muito bem!

O ClosedXML facilita para os desenvolvedores criar arquivos do Excel 2007/2010. Ele fornece uma boa maneira orientada a objetos para manipular os arquivos (semelhante ao VBA) sem lidar com os aborrecimentos dos documentos XML. Pode ser usado por qualquer linguagem .NET como C # e Visual Basic (VB).


8
Eu amo a ironia no nome ...
Jagd

Utilizou-o também e mesma experiência. Funciona bem e é muito flexível.
AnthonyVO

14

SpreadsheetGear para .NET lê e grava CSV / XLS / XLSX e faz mais.

Você pode ver exemplos ao vivo do ASP.NET com código-fonte C # e VB aqui e baixar uma avaliação gratuita aqui .

É claro que acho que o SpreadsheetGear é a melhor biblioteca para importar / exportar pastas de trabalho do Excel no ASP.NET - mas sou tendenciosa. Você pode ver o que alguns de nossos clientes dizem no lado direito desta página .

Isenção de responsabilidade: Eu possuo SpreadsheetGear LLC


@ Joe Erickson: Você pode dizer como se lê um CSV e, em seguida, produz um XML a partir do CSV, basta ler usando o equipamento de planilha e usando o XLS produzindo um arquivo XML resultante que contém essa estrutura? Ou podemos usar o Spreadsheetgear para produzir um XML diretamente de um CSV?
AnkitSablok


5

Eu usei Flexcel no passado e foi ótimo. Mas isso foi mais para criar e atualizar programaticamente planilhas do Excel.


Não vejo que isso suporte o Excel 2007 (xlsx). Como o xls suporta apenas linhas de 64k, isso é uma limitação para mim.
Jason Kealey

@ Jason Kealey - não Flexcel agora suportam Excel 2007 e 2010.
Pauk

5

A exportação de CSV é simples, fácil de implementar e rápida. Há um problema em potencial que vale a pena notar, no entanto. O Excel (até 2007) não preserva zeros à esquerda nos arquivos CSV. Isso exibirá códigos postais, códigos de produto e outros dados textuais que contêm valores numéricos. Há um truque que fará o Excel importar os valores corretamente (usando delimitadores e valores de prefixo com o sinal =, se bem me lembro, por exemplo, .., = "02052", ...). Se você possui usuários que farão tarefas de pós-processamento com o CSV, eles precisam estar cientes de que precisam alterar o formato para XLS e não salvar o arquivo novamente no CSV. Se o fizerem, os zeros à esquerda serão perdidos para sempre.


1
Para qualquer coisa que deva ser preservada como texto, basta colocar um '(apóstrofo) no início
phuclv

Outro fato interessante: não consigo abrir um arquivo separado por vírgulas em vários locais, como o alemão. O que torna csv um formato pobres para compartilhar dados com contatos internacionais
Christian Sauer

4

Durante anos, tenho usado o JExcel para isso, um excelente projeto Java de código aberto. Também era capaz de .NET usando o J # para compilá-lo, e também tive grande sucesso com ele nesta encarnação. No entanto, recentemente, precisei migrar o código para o .NET nativo para dar suporte a um aplicativo IIS de 64 bits no qual crio a saída do Excel. A versão J # de 32 bits não seria carregada.

O código para CSharpJExcel é LGPL e está disponível atualmente neste página, enquanto nos preparamos para implantá-lo no site JExcel SourceForge. Ele será compilado com o VS2005 ou VS2008. Os exemplos na documentação original do JExcel passarão intactos para a versão .NET.

Espero que seja útil para alguém aqui fora.


Ambos os links não funcionam mais ... mas encontrei alguns trechos dele e parece que ele é mais amigável ao Java, não muito para desenvolvedores .NET. No entanto, encontrei outra biblioteca oposta: é uma biblioteca .NET nativa ( GemBox.Spreadsheet ), que também foi portada para Java ( GemBox.Spreadsheet for Java ).
Hazel Patton


3

O site a seguir demonstra como exportar um DataTable, DataSet ou List <> para um arquivo .xlsx "adequado" do Excel 2007 (em vez de exportar um arquivo .csv e fazer com que o Excel o abra).

Ele usa as bibliotecas OpenXML, portanto você não precisa ter o Excel instalado no seu servidor.

Base de Conhecimento Mikes - ExportToExcel

Todo o código-fonte é fornecido, gratuitamente , além de um aplicativo de demonstração.

É muito fácil adicionar aos seus próprios aplicativos, basta chamar uma função, passando um nome de arquivo do Excel e sua fonte de dados:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Espero que isto ajude.


2

Verifique o projeto ExcelPackage , ele usa o formato de arquivo Office Open XML do Excel 2007, é leve e de código aberto ...


1
Parecia bom, mas um comentário diz que é ruim com arquivos grandes (meu cenário)
Jason Kealey

1
Interessante - é licenciado como GPL, não LGPL. Portanto, ele deve ser usado em aplicativos GPL. (Além disso, lamentável que o desenvolvimento parece ter parado.)
Jason Kealey

1
Eu tentei o ExcelPackage, mas tive que abandoná-lo - ele falha quando você tenta colocar aspas simples (') em uma célula.
Igor Brejc

2

Eu tentei o CSharpJExcel e não o recomendaria, pelo menos até que exista alguma documentação disponível. Ao contrário dos comentários dos desenvolvedores, não é uma porta nativa direta.


2

Sei que é tarde demais, mas me sinto obrigado a responder xPorter (gravação) e xlReader (leitura) do xPortTools.Net . Testamos várias bibliotecas e nada chegou perto do desempenho (estou falando de escrever milhões de linhas em segundos aqui). Não posso dizer coisas boas o suficiente sobre esses produtos!


2

Você pode usar Microsoft.Jet.OLEDB.4.0


1
Um dos meus requisitos é não ter o Excel em execução no servidor.
266 Jason Kealey

2
acho que não está funcionando !!
Soner Gönül

2
O Microsoft office não é necessário para "Microsoft.Jet.OLEDB.4.0" (para xls) "Microsoft.ACE.OLEDB.12.0 para xlsx". você precisa usar apenas drivers, portanto, não há chance de executar o Excel no servidor @Jason Kealey
Sanjay Goswami

1
Usei isso para XLS (não o requisito original) e para completar ... Existem alguns problemas importantes: (1) são apenas de 32 bits; portanto, você precisará definir o IIS para permitir isso. (2) É terrivelmente lento na exportação. (3) Possui limites de linha e coluna mal documentados. (4) Insiste em "cheirar o tipo" de colunas importadas, a menos que você tenha acesso ao registro, e geralmente erra.
PhilW

1

Acabamos de identificar uma necessidade semelhante. E acho importante considerar a experiência do usuário.

Nós quase fomos desviados da mesma forma:

  1. Preparar / trabalhar em arquivo de planilha
  2. Salvar Arquivo
  3. Importar arquivo
  4. Trabalhar com dados no sistema

... fluxo de trabalho

O Add-in Express permite criar um botão no Excel sem toda essa chatice tediosa com o VSTO. Em seguida, o fluxo de trabalho se torna:

  1. Preparar / trabalhar em arquivo de planilha
  2. Importar arquivo (usando o botão dentro do Excel )
  3. Trabalhar com dados no sistema

Faça com que o código por trás do botão use a API do Excel "nativa" (via Add-in Express) e envie diretamente para o sistema do destinatário. Você não pode ficar muito mais transparente para o desenvolvedor ou o usuário. Vale a pena considerar.



1

Você pode tentar a seguinte biblioteca, é fácil e é apenas um invólucro leve do Open XML SDK da Microsoft (você pode até reutilizar formatação, estilos e até planilhas inteiras do arquivo secundário do Excel): http://officehelper.codeplex.com


Uma nova versão da biblioteca foi publicada recentemente.
Aron.sinoai #

0

Spreadsheetgear é a melhor biblioteca comercial que encontramos e estamos usando. Nossa empresa faz muitas importações e exportações avançadas de Excel e o Spreadsheetgear suporta muitos recursos avançados do Excel, muito além de qualquer coisa que você possa fazer com um CSV simples, e é rápido. Não é gratuito ou muito barato, mas vale a pena porque o suporte é excelente. Os desenvolvedores realmente responderão a você se você encontrar um problema.


0

Que tal a biblioteca java apache POI. Eu não o usei para o Excel, mas o usei para o Word 2007.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.