Pregunta Crear archivo de Excel (.XLS y .XLSX) desde C #


¿Cómo puedo crear una hoja de cálculo Excel con C # sin requerir que Excel esté instalado en la máquina que ejecuta el código?


1566


origen


Respuestas:


Puede usar una biblioteca llamada ExcelLibrary. Es una biblioteca gratuita de código abierto publicada en Google Code:

ExcelLibrary

Parece ser un puerto del PHP ExcelWriter que mencionaste anteriormente. Todavía no se escribirá en el nuevo formato .xlsx, pero están trabajando para agregar esa funcionalidad en.

Es muy simple, pequeño y fácil de usar. Además, tiene un DataSetHelper que le permite usar DataSets y DataTables para trabajar fácilmente con datos de Excel.

ExcelLibrary parece funcionar solo para el formato anterior de Excel (archivos .xls), pero puede estar agregando soporte en el futuro para los formatos más nuevos de 2007/2010.

También puedes usar EPPlus, que funciona solo para archivos de formato Excel 2007/2010 (archivos .xlsx).

Hay algunos errores conocidos con cada biblioteca como se indica en los comentarios. En general, EPPlus parece ser la mejor opción a medida que pasa el tiempo. Parece que también se actualiza y documenta más activamente.

Además, como se señala por @ АртёмЦарионов a continuación, EPPlus tiene soporte para Pivot Tables y ExcelLibrary puede tener algún soporte (Problema de la tabla pivote en ExcelLibrary)

Aquí hay un par de enlaces para referencia rápida:
ExcelLibrary - GNU Lesser GPL
EPPlus - Licencia pública general menor de GNU (LGPL)

Aquí hay un código de ejemplo para ExcelLibrary:

Aquí hay un ejemplo que toma datos de una base de datos y crea un libro de trabajo a partir de ella. Tenga en cuenta que el código ExcelLibrary es la única línea en la parte inferior:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Crear el archivo de Excel es tan fácil como eso. También puede crear manualmente archivos de Excel, pero la funcionalidad anterior es lo que realmente me impresionó.


874



Si está satisfecho con el formato xlsx, pruebe mi codeplex Proyecto GitHub. EPPlus. Comencé con la fuente de ExcelPackage, pero hoy es una reescritura total. Admite rangos, estilos de celda, gráficos, formas, imágenes, nombres, autofiltro y muchas otras cosas.


490



He utilizado con éxito los siguientes proyectos de código abierto:

  • ExcelPackage para formatos OOXML (Office 2007)

  • NPOI para el formato .XLS (Office 2003). NPOI 2.0 (Alpha) también es compatible con XLSX.

Eche un vistazo a mis publicaciones en el blog:

Crear hojas de cálculo Excel .XLS y .XLSX en C #

NPOI con tabla de Excel y tabla dinámica


146



¿Y qué hay del uso de Open XML SDK 2.0 para Microsoft Office?

Algunos beneficios:

  • No requiere Office instalado
  • Hecho por Microsoft = documentación decente de MSDN
  • Solo una .Net dll para usar en el proyecto
  • SDK viene con muchas herramientas como diff, validador, etc.

Campo de golf:


140



Puede usar OLEDB para crear y manipular archivos de Excel. Mira esto: Lectura y escritura de Excel usando OLEDB.

Ejemplo típico:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

EDITAR - Algunos enlaces más:


94



La solución comercial, SpreadsheetGear for .NET lo haré.

Puedes ver muestras en vivo de ASP.NET (C # y VB) aquí y descarga una versión de evaluación aquí.

Descargo de responsabilidad: soy dueño de SpreadsheetGear LLC


72



Algunas opciones que he usado:

Si XLSX es imprescindible: ExcelPackage es un buen comienzo pero murió cuando el desarrollador dejó de trabajar en él. ExML recogió desde allí y agregó algunas características. ExML no es una mala opción, todavía lo estoy usando en un par de sitios web de producción.

Para todos mis nuevos proyectos, sin embargo, estoy usando NPOI, el puerto .NET de POI Apache. NPOI 2.0 (Alpha) también es compatible con XLSX.


55



Una opción extremadamente ligera puede ser el uso de tablas HTML. Simplemente cree etiquetas de cabeza, cuerpo y tabla en un archivo y guárdelo como un archivo con una extensión .xls. Existen atributos específicos de Microsoft que puede usar para diseñar el resultado, incluidas las fórmulas.

Me doy cuenta de que puede que no esté codificando esto en una aplicación web, pero aquí hay una ejemplo de la composición de un archivo Excel a través de una tabla HTML. Esta técnica podría usarse si estuviera codificando una aplicación de consola, aplicación de escritorio o servicio.


53