2008-08-18 15 views
5

Necesito acceder a los libros de Excel desde .Net. Sé todo sobre las diferentes formas de hacerlo (las he escrito en un blog post), y sé que usar un componente .Net nativo será el más rápido. Pero la pregunta es, ¿cuál de los componentes gana? Alguien los ha comparado? He estado usando Syncfusion XlsIO, pero eso es muy lento para algunas operaciones clave (como eliminar filas en un libro que contiene miles de rangos con nombre).¿Alguien tiene puntos de referencia de componentes .NET Excel IO?

Respuesta

5

No he hecho ningún punto de referencia adecuado, pero probé varios otros componentes y descubrí que SpreadsheetGear era considerablemente más rápido que XlsIO que antes. He escrito algunos de mis hallazgos en este post

1

No puedo ayudarle con su pregunta original, pero ¿sabe que puede acceder a los archivos de Excel utilizando una OleDbConnection y, por lo tanto, tratarla como una base de datos? A continuación, puede leer las hojas de trabajo en una tabla de datos, realizar todos los cambios que necesita a los datos en su aplicación, y luego guardar todo de nuevo en el archivo usando un OleDbConnection.

+0

Paul, Gracias. Era consciente de eso (quizás debería incluirlo en mi blog). Sin embargo, en este caso, no son los datos que realmente necesito. Son cosas como el estilo de celda y el formateo, etc. Sam –

0

Sí, pero no los voy a publicar por cortesía de Syncfusion (le piden que no publique puntos de referencia), porque no soy un experimentado Probador, por lo que mis pruebas probablemente son un poco defectuosas, pero sobre todo porque lo que realmente comparas hace una gran diferencia entre quién gana y cuánto.

Tomé uno de sus ejemplos de "rendimiento" y agregué la misma rutina en EPPlus para compararlos. XLSIO fue aproximadamente un 15% más rápido con insertos sencillos, dependiendo de la relación fila/columna (probé algunas), el uso de memoria parecía muy similar. Cuando agregué una rutina que, después de agregar todas las filas, borré cada 10ma fila y luego inserté una nueva fila 2 filas arriba de eso - XLSIO fue significativamente más lento en esa circunstancia.

Un punto de referencia genérico es bastante inútil para usted. Debes probarlos uno contra el otro en los escenarios específicos que usas.

He estado usando EPPlus durante algunos años y el rendimiento ha sido bueno, no recuerdo haberlo gritado.

Más digna de su consideración es la funcionalidad, el soporte (Syncfusion ha sido bueno, según mi experiencia), la documentación, el acceso al código fuente si eso es importante y, lo que es más importante, qué sentido tiene la API para usted. la sintaxis puede ser bastante diferente. p.ej. Estilos con nombre

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(); 

EPPlus

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; 
Cuestiones relacionadas