Pergunta

Estou precisando acessar pastas de trabalho do Excel em .Net.Eu sei tudo sobre as diferentes maneiras de fazer isso (escrevi-as em um postagem no blog) e sei que usar um componente .Net nativo será o mais rápido.Mas a questão é: qual dos componentes vence?Alguém os comparou?Tenho usado o Syncfusion XlsIO, mas isso é muito lento para algumas operações importantes (como excluir linhas em uma pasta de trabalho contendo milhares de intervalos nomeados).

Foi útil?

Solução

Não fiz nenhum benchmark adequado, mas experimentei vários outros componentes e descobri que Planilha Gear foi consideravelmente mais rápido que o XlsIO que eu estava usando antes.Eu escrevi algumas das minhas descobertas neste publicar

Outras dicas

Não posso ajudá-lo com sua pergunta original, mas você sabe que pode acessar arquivos do Excel usando um OleDbConnection e, portanto, tratá-lo como um banco de dados?Você pode então ler planilhas em um DataTable, realizar todas as alterações necessárias nos dados do seu aplicativo e salvar tudo de volta no arquivo usando um OleDbConnection.

Sim, mas não vou publicar os dois por cortesia da Syncfusion (eles pedem para você não publicar benchmarks), porque não sou um testador experiente, então meus testes provavelmente são um pouco falhos, mas principalmente porque o que você realmente faz benchmark faz uma enorme diferença para quem ganha e por quanto.

Peguei um de seus exemplos de “desempenho” e adicionei a mesma rotina no EPPlus para compará-los.XLSIO foi cerca de 15% mais rápido apenas com inserções simples, dependendo da proporção linha/coluna (tentei algumas), o uso de memória parecia muito semelhante.Quando adicionei uma rotina que, depois de todas as linhas terem sido adicionadas, excluía a cada 10 linhas e depois inseria uma nova linha 2 linhas acima dessa - o XLSIO foi significativamente mais lento nessa circunstância.

Um benchmark genérico é praticamente inútil para você.Você precisa testá-los uns contra os outros nos cenários específicos que usar.

Uso o EPPlus há alguns anos e o desempenho tem sido bom, não me lembro de ter gritado com ele.

Mais digno de sua consideração é a funcionalidade, o suporte (o Syncfusion tem sido bom, na minha experiência), a documentação, o acesso ao código-fonte, se isso for importante, e - o mais importante - quanto sentido a API faz para você, a sintaxe pode ser bem diferente.por exemplo.Estilos Nomeados

XLSIO

headerStyle.BeginUpdate();
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33);
headerStyle.Font.Bold = true;
headerStyle.Borders[ExcelBordersIndex.EdgeLeft]  .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeTop]   .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
headerStyle.EndUpdate();

EP Plus

ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle");
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Style.Font.Bold = true;
headerStyle.Style.Border.Left.Style   = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Right.Style  = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Top.Style    = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top