1898 votos

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

¿Cómo puedo crear una Hoja de cálculo de Excel con C#?

Idealmente, me gustaría utilizar código abierto de manera que no tenga que añadir dependencias de cualquier tercero a mi código, y me gustaría evitar el uso de Excel directamente para crear el archivo (mediante la Automatización OLE.)

La solución del archivo .CSV es fácil, y es como lo estoy manejando ahora mismo, pero me gustaría controlar los formatos de salida.


EDIT: todavía estoy mirando estos para ver la mejor alternativa para mi la solución. Interop funciona, pero requiere que Excel esté en el equipo que está utilizando. También el método OLEDB es intrigante, pero no da mucho más de lo que puedo lograr con los archivos CSV. Voy a mirar más en el formato 2003 xml, pero eso también pondria un requisito > Excel 2003 en el archivo.

Actualmente estoy buscando en un port del Excel Writer de PEAR (biblioteca de PHP) que permite algunos datos y formatos XLS muy buenos y es compatible con el formato Excel_97 que todas las versiones de Excel soportan. El Excel Writer de PEAR está aquí: PEAR - Excel Writer

1060voto

Mike Webb Puntos 3654

Puede utilizar una biblioteca llamada ExcelLibrary. Es un servicio gratuito, de código abierto publicado en Google Code:

ExcelLibrary

Esto parece ser un port de PHP ExcelWriter que has mencionado anteriormente. No escribe en el nuevo formato .xlsx todavía, pero están trabajando en la adición de la funcionalidad.

Es muy simple, pequeño y fácil de usar. Además de que tiene una DataSetHelper que permite el uso de conjuntos de datos y tablas de datos para trabajar fácilmente con datos de Excel.

ExcelLibrary parece que aún solo funciona para los antiguos formatos de Excel (.xls), pero puede añadir soporte en el futuro para los nuevos formatos 2007/2010.

También puedes utilizar EPPlus, que sólo funciona para los archivos en formato .xlsx de Excel 2007/2010.

Hay un par de errores conocidos con cada biblioteca, como se señaló en los comentarios. En general, EPPlus parece ser la mejor opción conforme como pasa el tiempo. Parece ser actualizado mas a menudo y documentado.

Además, como señaló @АртемЦарионов a continuación, EPPlus tiene soporte para Tablas dinámicas y ExcelLibrary puede tener algún tipo de apoyo (tabla Pivote problema en ExcelLibrary)

Aquí hay un par de enlaces para una referencia rápida:
ExcelLibrary - GNU GPL
EPPlus - GNU Library General Public License (LGPL)

Aquí algunos ejemplos de código para ExcelLibrary:

Aquí es un ejemplo tomando datos de una base de datos y la creación de un libro de ella. Tenga en cuenta que el ExcelLibrary de código 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 así de fácil. También puede crear manualmente los archivos de Excel, pero la funcionalidad anterior es lo que realmente me impresionó.

592voto

Jan Källman Puntos 201

Si usted es feliz con el formato xlsx, intente con mi proyecto de codeplex. EPPlus. Empezó con la fuente de ExcelPackage, pero la de hoy es una reescritura total. Soporta rangos, la célula de estilo, cuadros, formas, imágenes, namesranges, autofiltro y un montón de otras cosas.

167voto

Leniel Macaferi Puntos 38324

Yo he usado con éxito los siguientes proyectos de código abierto:

  • ExcelPackage para formatos OOXML (Office 2007)

  • NPOI de formato .XLS (Office 2003). NPOI 2.0 (Alfa) también admite XLSX.

Echa un vistazo a mi blog:

La creación de hojas de cálculo de Excel .XLS y .XLSX en C#

NPOI con Excel Tabla dinámica y de Gráfico

108voto

Panos Puntos 11429

Usted puede utilizar OLEDB para crear y manipular archivos de Excel. Verifique lo siguiente: la Lectura y la Escritura de Excel mediante 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:

80voto

Joe Erickson Puntos 4571

La solución comercial, SpreadsheetGear para .NET va a hacerlo.

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

Descargo de responsabilidad: soy dueño de SpreadsheetGear LLC

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X