without from creating create crear archivo c# .net excel file-io

from - Cree un archivo de Excel(.XLS y.XLSX) desde C#



create xlsx file in c# (30)

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


¡Hace poco usé FlexCel.NET y me pareció una biblioteca excelente! No digo eso sobre demasiados productos de software. No tiene sentido dar todo el argumento de venta aquí, puede leer todas las características en su sitio web.

Es un producto comercial, pero obtienes el código fuente completo si lo compras. Así que supongo que podrías compilarlo en tu ensamblaje si realmente quisieras. De lo contrario, solo es un ensamblaje adicional para xcopy, sin configuración ni instalación ni nada de eso.

No creo que encuentre ninguna forma de hacerlo sin las bibliotecas de terceros, ya que .NET framework, obviamente, no tiene soporte incorporado para él y la automatización OLE es solo un mundo de dolor.


¿Alguna vez has probado sylk?

Solíamos generar hojas de cálculo en asp clásico como sylk y en este momento también estamos buscando un generador de excelencia.

Las ventajas para sylk son, puedes formatear las celdas.


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

Algunos beneficios:

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

Campo de golf:



Algunas opciones que he usado:

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

Sin embargo, para todos mis nuevos proyectos, estoy usando NPOI , el puerto .NET de poi.apache.org . NPOI 2.0 (Alpha) también es compatible con XLSX.


Algunos proveedores de componentes de terceros, como Infragistics o Syncfusion, ofrecen muy buenas capacidades de exportación de Excel que no requieren la instalación de Microsoft Excel.

Dado que estos proveedores también proporcionan componentes avanzados de cuadrícula de UI, estos componentes son particularmente útiles si desea que el estilo y el diseño de una exportación de Excel imiten el estado actual de una cuadrícula en la interfaz de usuario de su aplicación.

Si su exportación está destinada a ejecutarse en el lado del servidor con énfasis en los datos que se exportarán y sin enlace a la interfaz de usuario, entonces me gustaría ir a una de las opciones de código abierto (por ejemplo, ExcelLibrary).

Anteriormente he estado involucrado con proyectos que intentaron usar la automatización del lado del servidor en el conjunto de aplicaciones de Microsoft Office. Sobre la base de esta experiencia, recomendaría encarecidamente este enfoque.


Aquí hay una biblioteca C # completamente gratuita, que le permite exportar desde un DataSet , DataTable o List<> a un archivo .xlsx de Excel 2007 genuino, usando las bibliotecas OpenXML:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Se proporciona el código fuente completo, de forma gratuita, junto con las instrucciones y una aplicación de demostración.

Después de agregar esta clase a su aplicación, puede exportar su DataSet a Excel en una sola línea de código:

CreateExcelFile.CreateExcelDocument(myDataSet, "C://Sample.xlsx");

No hay nada más simple que eso ...

Y ni siquiera requiere que Excel esté presente en su servidor.


Aquí hay una forma de hacerlo con LINQ to XML, completa con código de ejemplo:

Importar y exportar rápidamente datos de Excel con LINQ a XML

Es un poco complejo, ya que tiene que importar espacios de nombres y demás, pero le permite evitar dependencias externas.

(También, por supuesto, es VB .NET, no C #, pero siempre puedes aislar las cosas de VB .NET en su propio proyecto para usar XML Literals, y hacer todo lo demás en C #).


Bien,

También puede utilizar una biblioteca de terceros como Aspose .

Esta biblioteca tiene la ventaja de que no requiere que Excel esté instalado en su máquina, lo que sería ideal en su caso.


Es posible que desee echar un vistazo a GemBox.Spreadsheet .

Tienen una versión gratuita con todas las funciones, pero están limitadas a 150 filas por hoja y 5 hojas por libro, si eso se ajusta a sus necesidades.

No he tenido la necesidad de usarlo todavía, pero me parece interesante.


Es posible que desee revisar las clases de interoperabilidad . Usted dice que no OLE (lo que no es así), pero las clases de interoperabilidad son muy fáciles de usar.

Usted podría estar impresionado si no los ha probado.

Tenga en cuenta la stance de Microsoft sobre esto:

Microsoft actualmente no recomienda, y no admite, la automatización de aplicaciones de Microsoft Office desde cualquier aplicación o componente cliente no interactivo y desatendido (incluidos ASP, ASP.NET, DCOM y Servicios de NT), ya que Office puede mostrar un comportamiento inestable y / o punto muerto cuando Office se ejecuta en este entorno.




La forma más sencilla y rápida de crear un archivo Excel desde C # es usar la herramienta de productividad Open XML. La herramienta Open XML Productivity Tool viene con la instalación de Open XML SDK. La herramienta de ingeniería inversa cualquier archivo de Excel en el código C #. El código C # se puede usar para volver a generar ese archivo.

Una visión general del proceso involucrado es:

  1. Instale el Open XML SDK con la herramienta.
  2. Cree un archivo de Excel utilizando el último cliente de Excel con el aspecto deseado. DesiredLook.xlsx como DesiredLook.xlsx .
  3. Con la herramienta, abra DesiredLook.xlsx y haga clic en el botón Reflejar Código cerca de la parte superior.
  4. El código C # para su archivo se generará en el panel derecho de la herramienta. Agregue esto a su solución C # y genere archivos con ese aspecto deseado.

Como beneficio adicional, este método funciona para cualquier archivo de Word y PowerPoint. Como desarrollador de C #, luego realizarás cambios en el código para adaptarlo a tus necesidades.

He desarrollado una aplicación WPF simple en github que se ejecutará en Windows para este propósito. Hay una clase de marcador de posición llamada GeneratedClass donde puede pegar el código generado. Si regresa una versión del archivo, generará un archivo de Excel como este:


La solución comercial, SpreadsheetGear para .NET lo hará.

Puede ver ejemplos en vivo de ASP.NET (C # y VB) here y descargar una versión de evaluación here .

Descargo de responsabilidad: Soy dueño de SpreadsheetGear LLC


Las diversas bibliotecas XML de Office 2003 disponibles funcionan bastante bien para archivos de Excel más pequeños. Sin embargo, creo que el gran tamaño de un libro de trabajo grande guardado en formato XML es un problema. Por ejemplo, un libro de trabajo con el que trabajaré sería de 40 MB en el nuevo formato XLSX (y ciertamente más compacto) que se convertirá en un archivo XML de 360 ​​MB.

En cuanto a mi investigación, hay dos paquetes comerciales que permiten la salida a los formatos de archivo binarios más antiguos. Son:

Tampoco son baratos (creo que 500USD y 800USD respectivamente). Pero ambos trabajan independientemente del propio Excel.

Lo que me interesa es el módulo de salida de Excel para los gustos de OpenOffice.org. Me pregunto si se pueden portar de Java a .Net.



OpenXML también es una buena alternativa que ayuda a evitar la instalación de MS Excel en el servidor. El Open XML SDK 2.0 proporcionado por Microsoft simplifica la tarea de manipular los paquetes Open XML y los elementos subyacentes del esquema Open XML dentro de un paquete. La Interfaz de programación de aplicaciones (API) Open XML encapsula muchas tareas comunes que los desarrolladores realizan en los paquetes Open XML.

Mira esto OpenXML: Alternativa que ayuda a evitar la instalación de MS Excel en el servidor



Puede crear archivos de Excel con buen formato utilizando esta biblioteca: http://officehelper.codeplex.com/documentation
Vea la siguiente muestra:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME)) { helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN; helper.CurrentSheetName = "Sheet1"; helper.CurrentPosition = new CellRef("C3"); //the template xlsx should contains the named range "header"; use the command "insert"/"name". helper.InsertRange("header"); //the template xlsx should contains the named range "sample1"; //inside this range you should have cells with these values: //<name> , <value> and <comment>, which will be replaced by the values from the getSample() CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); helper.InsertRange(sample1, getSample()); //you could use here other named ranges to insert new cells and call InsertRange as many times you want, //it will be copied one after another; //even you can change direction or the current cell/sheet before you insert //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it helper.DeleteSheet("Sheet3"); }

donde la muestra se ve así:

private IEnumerable<List<object>> getSample() { var random = new Random(); for (int loop = 0; loop < 3000; loop++) { yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop}; } }



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

ExcelLibrary

Este parece ser un puerto del PHP ExcelWriter que mencionaste anteriormente. Aún no escribirá en el nuevo formato .xlsx, pero están trabajando para agregar esa funcionalidad.

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

Parece que ExcelLibrary aún funciona solo para el formato de Excel más antiguo (archivos .xls), pero puede agregar compatibilidad en el futuro para los formatos más recientes de 2007/2010.

También puede usar EPPlus , que funciona solo para archivos con 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 indica en @ АртёмЦарионов a continuación, EPPlus es compatible con las tablas dinámicas y ExcelLibrary puede tener alguna compatibilidad ( problema con la tabla dinámica en ExcelLibrary )

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

Aquí un código de ejemplo para ExcelLibrary:

Aquí hay un ejemplo que toma datos de una base de datos y crea un libro a partir de ella. Tenga en cuenta que el código de 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ó.


Puedes usar OLEDB para crear y manipular archivos de Excel. Marque esto: Leer y escribir 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:


Si está creando archivos de Excel 2007/2010, pruebe este proyecto de código abierto: https://github.com/closedxml/closedxml

Proporciona una forma orientada a los objetos para manipular los archivos (similar a VBA) sin tener que lidiar con las molestias de los documentos XML. Puede ser utilizado por cualquier lenguaje .NET como C # y Visual Basic (VB).

ClosedXML le permite crear archivos de Excel 2007/2010 sin la aplicación de Excel. El ejemplo típico es crear informes de Excel en un servidor web:

var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx");


Si está satisfecho con el formato xlsx, pruebe el proyecto GitHub de mi codeplex . EPPlus . Comenzó con la fuente de ExcelPackage, pero hoy es una reescritura total. Admite rangos, estilos de celdas, cuadros, formas, imágenes, arreglos de nombres, autofiltro y muchas otras cosas.


Solo desea agregar otra referencia a una solución de terceros que aborde directamente su problema: http://www.officewriter.com

(Descargo de responsabilidad: trabajo para SoftArtisans, la compañía que hace OfficeWriter)


Una opción extremadamente liviana puede ser usar tablas HTML. Simplemente cree etiquetas de cabeza, cuerpo y tabla en un archivo, y guárdelo como un archivo con la extensión .xls. Hay atributos específicos de Microsoft que puede usar para dar estilo a la salida, incluidas las fórmulas.

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


IKVM + POI

O bien, podría utilizar la interoperabilidad ...


Syncfusion Essential XlsIO puede hacer esto. No tiene dependencia en la oficina de Microsoft y también tiene soporte específico para diferentes plataformas.

Ejemplo de código:

//Creates a new instance for ExcelEngine. ExcelEngine excelEngine = new ExcelEngine(); //Loads or open an existing workbook through Open method of IWorkbooks IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName); //To-Do some manipulation| //To-Do some manipulation //Set the version of the workbook. workbook.Version = ExcelVersion.Excel2013; //Save the workbook in file system as xlsx format workbook.SaveAs(outputFileName);

Todo el conjunto de controles está disponible de forma gratuita a través del programa de licencias de la comunidad si califica (menos de 1 millón de USD en ingresos). Nota: trabajo para Syncfusion.


public class GridViewExportUtil { public static void Export(string fileName, GridView gv) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader( "content-disposition", string.Format("attachment; filename={0}", fileName)); HttpContext.Current.Response.ContentType = "application/ms-excel"; using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // Create a form to contain the grid Table table = new Table(); // add the header row to the table if (gv.HeaderRow != null) { GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); table.Rows.Add(gv.HeaderRow); } // add each of the data rows to the table foreach (GridViewRow row in gv.Rows) { GridViewExportUtil.PrepareControlForExport(row); table.Rows.Add(row); } // add the footer row to the table if (gv.FooterRow != null) { GridViewExportUtil.PrepareControlForExport(gv.FooterRow); table.Rows.Add(gv.FooterRow); } // render the table into the htmlwriter table.RenderControl(htw); // render the htmlwriter into the response HttpContext.Current.Response.Write(sw.ToString()); HttpContext.Current.Response.End(); } } } /// <summary> /// Replace any of the contained controls with literals /// </summary> /// <param name="control"></param> private static void PrepareControlForExport(Control control) { for (int i = 0; i < control.Controls.Count; i++) { Control current = control.Controls[i]; if (current is LinkButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); } else if (current is ImageButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); } else if (current is HyperLink) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); } else if (current is DropDownList) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); } else if (current is CheckBox) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); } if (current.HasControls()) { GridViewExportUtil.PrepareControlForExport(current); } } } }

Hola, esta solución es exportar su vista de cuadrícula a su archivo de Excel que podría ayudarlo