He estado evaluando EPPlus, ClosedXML y SpreadsheetLight durante la última semana. Las tres son geniales bibliotecas que hacen que trabajar con el extremadamente complicado OpenXML sea muy fácil. He decidido ir con EPPlus por las siguientes razones:
Inicialmente, iba a ir con ClosedXML. Tiene una gran documentación y la estructura del objeto tiene mucho sentido para mí. Sin embargo, tengo algunos requisitos de gráficos ya partir de ahora, ClosedXML no tiene funciones de gráficos.
Luego me encontré con SpreadsheetLight que también tiene buenos documentos y admite algunos gráficos. También me gusta la actitud del autor y su compromiso con su producto. Sin embargo, el proyecto se basa en el SDK de OpenXML 2.0, no en el 2.5, que es un factor decisivo para mí porque quiero tener la flexibilidad de trabajar directamente con OpenXML en caso de que la biblioteca no satisfaga mis necesidades. Mi proyecto se dirige a Excel 2013, así que quiero tener el último SDK con el que trabajar.
Finalmente, me encontré con EPPlus que tiene la documentación correcta y admite la creación de gráficos. Ha sido descargado muchas veces más que los otros dos, lo que me da cierta seguridad al saber que otros lo están usando y que la comunidad parece estar activa en todo el proyecto. También están actualmente en la versión beta 2 de la versión 4, lo que suena prometedor a partir de lo que otros dicen. También estoy enterado de que EPPlus tiene un buen rendimiento (aunque los otros no son necesariamente malos) y la próxima versión 4 parece estar mejorando aún más.
actualización
Otra característica muy útil que he encontrado incluido con EPPlus es como se expone el XML para las diversas partes de la hoja de trabajo. Si hay una función que EPPlus no admite, aún puede editar el XML (en algunos casos) para obtener el resultado deseado. Por ejemplo, si tiene un gráfico dinámico y desea habilitar etiquetas de varios niveles, puede hacer lo siguiente:
private void EnableMultiLevelLabels(ExcelChart chart)
{
var element = chart.ChartXml.GetElementsByTagName("c:catAx")[0];
if (element == null)
return;
var multiLevelLabelNode = element.AppendChildElementNode("c:noMultiLvlLbl");
if (multiLevelLabelNode != null)
multiLevelLabelNode.AppendNodeAttribute("val", "0");
}
Sé que esta es una pregunta antigua, pero ¿hay alguna razón en particular por la que no contento con ClosedXML? ¿Es más una cuestión política donde necesita tener un número de versión importante, o crees que ClosedXML no es lo suficientemente estable? – jamiebarrow
Mi problema con ClosedXML es que simplemente no funciona en muchos casos. Hacer referencia a celdas con fórmulas de matriz, fórmulas de tabla, SUMAR.SI son algunas de las cosas que desglosan por completo la biblioteca. – Vedran