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


1,481

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

+3

No estoy seguro de si este es el lugar correcto, pero eche un vistazo a ClosedXML. Pone el límite> 2003 en su código, pero hasta ahora lo hemos usado con gran éxito. 25 mar. 142014-03-25 12:09:43

+1

Esto se puede hacer con .NET Framework, como se describe [aquí] (https://www.codeproject.com/Articles/15593/Read-and-write-Open-XML-files-MS-Office), o mucho más fácil con alguna biblioteca como [GemBox.Spreadsheet] (https://www.gemboxsoftware.com/spreadsheet/overview). 25 sep. 172017-09-25 09:59:18

822

Puede usar una biblioteca llamada ExcelLibrary. Es una biblioteca libre, de código abierto publicado en Google Code:

ExcelLibrary

Esto parece ser un puerto del PHP ExcelWriter que usted ha mencionado 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 que todavía funciona 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 puede 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 ha señalado por @ АртёмЦарионов continuación, EPPlus tiene soporte para tablas dinámicas y ExcelLibrary puede tener algo de apoyo (Pivot table issue in ExcelLibrary)

Aquí hay un par de enlaces para una referencia rápida:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Lesser General Public License (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 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 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ó.

+1

+1. De acuerdo con lo anterior. Intenté jugar con todos los COM bs, instalando Excel en el servidor de la aplicación. Demasiado trabajo al final. ¡Encontré esto y ahora el problema fue resuelto! 21 sep. 102010-09-21 17:01:24

+195

ExcelLibrary ha sido reemplazado por el excepcional EPPlus - http://epplus.codeplex.com. Jan lo actualiza regularmente. Lo he estado usando y es uno de los mejores proyectos de código abierto con los que hemos trabajado. 04 nov. 102010-11-04 00:11:19

+18

No. Use EppPlus - epplus.codeplex.com. Es el último más grande. Admite formateo. Lo uso. 05 nov. 102010-11-05 01:34:32

+2

¡EPPlus es increíble! No es necesario instalar Excel y funciona tan fácilmente 08 dic. 102010-12-08 23:47:20

+45

Parece que ExcelLibrary solo admite .xls y EPPlus solo .xlsx, por lo que se complementan entre sí. 04 feb. 112011-02-04 15:07:06

+3

Intenté utilizar ExcelLibrary, desafortunadamente, si los archivos generados están por debajo de un cierto lado, no se pueden abrir en Windows 7. Parece que se trata de un error conocido, sin solución aún: http://code.google.com/ p/excellibrary/issues/detail? id = 54 17 jun. 112011-06-17 09:55:36

+1

Intentó crear un archivo xls con ExcelLibrary, pero no funciona; no puede abrirlo con Excel 2010 plus :( 11 oct. 112011-10-11 10:59:43

+1

Debe tenerse en cuenta que ExcelLibrary tiene mucho rendimiento problemas al tratar con grandes conjuntos de datos (más de 5000 filas con muchas columnas). Actualmente estamos haciendo una gran modificación de la base de códigos en el trabajo para poder usarlo en un proyecto. 18 oct. 112011-10-18 23:17:34

  0

EPPlus parece mucho menos problemático que ExcelLibrary, PERO es GPL y por lo tanto, solo una solución para proyectos de código abierto. 26 ene. 122012-01-26 23:21:17

  0

¿Alguno de ellos admite la creación de tabla dinámica? 22 jun. 122012-06-22 14:32:46

+1

@ АртёмЦарионов: No estoy en una mejor posición que cualquier otra persona, pero de acuerdo o la página de inicio http://epplus.codeplex.com/, EPPlus admite tablas dinámicas, y de acuerdo con este problema (http://code.google.com/p/excellibrary/issues/detail?id=98&q=pivot&colspec= ID% 20Tipo% 20Status% 20Priority% 20ReportedBy% 20Owner% 20Summary% 20Opened) ExcelLibrary también tiene al menos cierto nivel de compatibilidad con las tablas dinámicas. hth. 03 jul. 122012-07-03 20:57:56

  0

Por una razón desconocida para mí EPPlus no funciona para mí. Pero esta biblioteca de Excel funciona bien. Me pregunto si hay alguna manera de hacer que la fila del encabezado sea negrita en Excel. 26 nov. 132013-11-26 07:44:15

+4

-1 Si va a publicar código de muestra, también puede asegurarse de que sea correcto. [* Utilice el método Dispose de esta interfaz para liberar explícitamente recursos no administrados junto con el recolector de elementos no utilizados. El consumidor de un objeto puede llamar a este método cuando ya no se necesita el objeto. *] (Http://msdn.microsoft.com/en-us/library/system.isobible (v = vs.110) .aspx) 22 feb. 142014-02-22 09:44:02

  0

Abra un archivo en blanco para mí ... ¿puede ser porque tengo ms office 2010? 18 may. 142014-05-18 13:20:32

  0

EPPlus en realidad sigue siendo técnicamente GPL porque es un trabajo derivado (es decir, la base de código todavía se basa en ExcelLibrary, y dado que es GPL, también lo es EPPlus ... no puede hacer algunos cambios en el código GPL y abofetear a LGPL licencia en él). ¿Alguien sabe de una forma de escribir en Excel utilizando un código comercial o una LGPL verdadera (o un código de licencia similar). 27 ene. 152015-01-27 20:48:09

+7

Por favor, deje de proponer EPPlus como una alternativa a ExcelLibrary hasta que sea capaz de la misma funcionalidad (uno maneja XLS, el otro XLSX). Por mucho que me guste EPPlus, simplemente no es una respuesta a las necesidades del OP (XLS). 01 abr. 152015-04-01 00:51:54

+1

Esta pregunta y sus respuestas son realmente antiguas. NPOI es ahora el camino a seguir, y me gustaría haberme dado cuenta antes de perder el tiempo con EPPlus y ExcelLibrary tratando de obtener una solución que funcione tanto para .xls como para .xlsx Obtenga las descargas de C# de npoi.codeplex.com. Y la mejor documentación que he encontrado, aunque es la versión de Java, está en poi.apache.org 20 may. 152015-05-20 01:02:39

  0

ExcelLibrary ya no funciona. Si desea escribir archivos de Excel 2003 (.xls) esta biblioteca funciona muy bien: CSharpJExcel http://sourceforge.net/projects/jexcelapi/ Asegúrese de descargar el puerto C#. 28 oct. 152015-10-28 15:06:41

+2

¿Qué pasa con [ClosedXML] (https://closedxml.codeplex.com/)? Puedo demostrar que soy útil en tus proyectos. 30 nov. 152015-11-30 18:10:23

+1

NPOI se ha movido de Codeplex a [Github] (https://github.com/tonyqus/ npoi). 19 jul. 172017-07-19 13:43:52

  0

@ChrisRogers ¿El OP realmente ha especificado eso? 27 jul. 172017-07-27 14:49:08

  0

@ wizzwizz4 - Sí, OP solicitó los formatos XLS y XLSX (en el título). Ese comentario (hace 2 años) fue dirigido a los muchos comentarios que pusieron adelante a EPPlus como sustituto de ExcelLibrary, lo que claramente no sucede hasta que no pueda manejar ambos formatos. 07 ago. 172017-08-07 01:56:24


36

De hecho, es posible que desee comprobar el interop classes. Usted dice que no OLE (que no es), pero las clases de interoperabilidad son muy fáciles de usar.

Puede quedar impresionado si no los ha probado.

Se advierte de Microsoft de stance en esto:

Microsoft no tiene actualmente recomendar, y no es compatible, Automatización de Microsoft Office aplicaciones desde cualquier aplicación sin supervisión no interactiva de cliente o componente (incluidos ASP, ASP.NET, DCOM y NT Services), porque Office puede mostrar un comportamiento inestable y/ointerbloqueo cuando Office se ejecuta en este entorno .

+4

Pero debe asegurarse de deshacerse de todo manualmente, de lo contrario, perderá memoria 29 sep. 082008-09-29 22:40:28

+6

@Ricky B: Además, en mi experiencia con la interoperabilidad es que usa Excel. Cada vez que lo usamos, si Excel no estaba instalado en la máquina, obtendríamos excepciones COM. 29 sep. 082008-09-29 22:42:57

+1

Con OLE, incluso con disposiciones muy cuidadosas, con el tiempo pierde la memoria o se bloquea. Esto es aceptable para las aplicaciones/estaciones de trabajo atendida, pero para los servidores no se recomienda (MS tiene una KB que indica esto). Para nuestro servidor, solo lo reiniciamos todas las noches. De nuevo, eso funciona bien. 09 mar. 102010-03-09 21:54:00

+9

@Geoffrey: ah OK me vas a hacer trabajar para eso :) -> http://support.microsoft.com/kb/257757 Microsoft no recomienda actualmente, y no admite, la automatización de las aplicaciones de Microsoft Office desde cualquier aplicación de cliente desatendida, no interactiva ... 11 mar. 102010-03-11 17:49:53

+3

Vengo a esta discusión después de luchar más de una semana en interoperabilidad, y a menos que tus necesidades sean muy simples, esto no va a funcionar. El soporte para formatear su hoja de cálculo es abismal, que podría decirse que es la razón para generar un archivo .xls y no solo un archivo plano .csv. Por ejemplo, ¿ha intentado generar más de 911 caracteres en una celda o ha intentado establecer el ancho de las celdas combinadas de manera consistente? Tengo, y no puedo decirte lo mucho que odio esta mierda ahora ... Hazte un favor e ir con una de las bibliotecas gratuitas mencionadas en esta discusión. 03 feb. 112011-02-03 18:52:15

  0

Todavía no he cambiado Interop para EPPlus (pero ya estoy en el medio camino), así que no sé realmente qué tan mejor es la vida, pero lidiar con Interop Tengo mucho dolor en casos muy sorprendentes casi cada vez que necesitaba algo más complejo que simplemente crear un archivo .xls/.xlsx con una tabla simple dentro. Y lo mencionado anteriormente "dos veces-verificar-disponer-todo-mágico" es uno de esos dolores cotidianos. Pero sí, funciona, y la mayoría de las veces es suficiente. 13 may. 132013-05-13 15:11:30


49

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 un example 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.

+5

Es tan especial pero funciona (sin mencionar que Excel emite una advertencia al abrir) y es tan simple que merece tener un lugar como solución. Aunque solo para mostrar que puede exportar un archivo excel :)) 04 ene. 122012-01-04 07:23:41

+1

Esta solución funcionó bien para mí, solo tenga en cuenta que no puede usar la extensión .xlsx 30 mar. 162016-03-30 18:24:11

  0

Algunas personas de mi organización no pueden abrir archivos excel hechos de esta manera en Office 2010 y superior .No sé cuál es el problema, pero tuve que implementar mi propia implementación de OpenXML. (vea la respuesta de Sogger) 08 dic. 162016-12-08 22:55:11


8

IKVM + POI

O bien, puede utilizar la interoperabilidad ...


90

Puede utilizar OLEDB para crear y manipular archivos de Excel. Verifique esto: Reading and Writing Excel using 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 más enlaces:

+3

¿Alguien puede confirmar si esto funciona cuando se ejecuta en x64? Estoy bastante seguro de que Jet solo funciona si su aplicación está compilada o ejecutándose en modo de 32 bits. 30 sep. 082008-09-30 01:45:11

+1

Acabo de probar esta conexión y falló en un Windows Server 2008 R2 x64 RC, parece que uno tiene que instalar el 2007 Office System Driver: Data Connectivity Components [http://www.microsoft.com/downloads/details. aspx? FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891 & displaylang = en] 16 jun. 092009-06-16 07:31:19

+23

Tenga mucho cuidado con esto: es un gran problema feo (por ejemplo, a veces adivina un tipo de columna y descarta todos los datos que no encajan). 29 sep. 092009-09-29 09:02:22

+7

Uno debe tener mucho cuidado si usa este método. Lo encontré muy escamoso para datos que no están en un formato perfecto. 09 jun. 102010-06-09 16:03:29

+5

Como persona que tuvo que usar OleDb en un gran proyecto, ¡digo MANTÉNGASE ALEJADO DE ESTO! A veces no es capaz de recuperar un valor de celda simplemente porque no puede entender el formato. No tiene una operación de eliminación. Funciona de manera totalmente diferente e impredecible, incluso con el menor cambio de proveedor. Yo diría que busque una solución comercial probada. 13 sep. 142014-09-13 18:32:16

+1

Microsoft ha actualizado Jet, pruebe este enlace http://stackoverflow.com/questions/14401729/difference-between-microsoft-jet-oledb-and-microsoft-ace-oledb 05 may. 162016-05-05 21:36:31

  0

En un trabajo anterior, utilizamos [Microsoft Access Database Engine 2010 Redistributable] (https://www.microsoft.com/en-us/download/details.aspx?id=13255). Tomó la forma de un controlador OLEDB que permitía leer y escribir en archivos de Excel, así como archivos de formato de acceso. Tenga en cuenta que esta descarga no requiere la instalación de todo el conjunto de aplicaciones de Office. Tenga en cuenta también que viene en sabores de 32 bits y 64 bits. Es muy importante que haga coincidir la versión de 32 bits o de 64 bits con ** la arquitectura del proceso de host ** que accederá al archivo (s). En nuestro caso, el proceso de host fue SSIS. 09 jul. 162016-07-09 05:33:12


13

Es posible que desee echar un vistazo a http://www.gemboxsoftware.com/GBSpreadsheetFree.htm.

Tienen una versión gratuita con todas las características, pero limitada a 150 filas por hoja y 5 hojas por libro de trabajo, si eso se ajusta a sus necesidades.

No he tenido necesidad de usarlo todavía, pero se ve interesante.


3

La solución de código abierto de Java es Apache POI. Quizás haya una forma de configurar la interoperabilidad aquí, pero no sé lo suficiente sobre Java para responder eso.

Cuando exploré este problema terminé usando los ensamblajes de Interop.


18

Puede considerar crear sus archivos usando el formato XML Spreadsheet 2003. Este es un formato XML simple que usa un well documented schema.


8

Aquí está una manera de hacerlo con LINQ to XML, con código de ejemplo:

Quickly Import and Export Excel Data with LINQ to XML

Es un poco complejo, ya que hay que importar los espacios de nombres y así sucesivamente, pero sí permitir eludir cualquier dependencia externa.

(También, por supuesto, es VB .NET, no en C#, pero siempre se puede aislar el material VB .NET en su propio proyecto para utilizar literales XML, y hacer todo lo demás en C#.)


10

I acuerde generar hojas de cálculo XML, aquí hay un ejemplo de cómo hacerlo para C# 3 (todo el mundo lo bloguea en VB 9: P) http://www.aaron-powell.com/linq-to-xml-to-excel


5

¿Alguna vez ha intentado con sylk?

Solíamos generar hojas de Excel en asp clásico como sylk y ahora también estamos buscando un excelgenerater.

Las ventajas para sylk son que puede formatear las celdas.

+1

11

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 el formato XML es un problema. Por ejemplo, un libro de trabajo con el que trabajo, que sería 40MB en el nuevo (y ciertamente más compacto) formato XLSX se convierte en un archivo XML de 360MB.

Por lo que mi investigación me ha llevado, hay dos paquetes comerciales que permiten la salida a los formatos de archivo binarios anteriores. Ellos son:

Ni son baratos (500USD y 800USD respectivamente, creo). pero ambos funcionan independientemente de Excel.

Lo que me gustaría tener curiosidad sobre el módulo de salida de Excel para los gustos de OpenOffice.org. Me pregunto si se pueden portar de Java a .Net.

  0

Éste funciona en .net y java, y no es costoso. SmartXLS http://www.smartxls.com 03 dic. 092009-12-03 08:08:22


69

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

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

exención de responsabilidad: Tengo SpreadsheetGear LLC

  0

Joe, este voto negativo en verdad me parece injusto. Tienes mi +1 para equilibrar ;-) 02 feb. 092009-02-02 15:56:52

+5

Tienes un gran producto, pero creo que mucha gente aquí está esperando soluciones gratuitas. Eso podría explicar los votos a la baja. 03 feb. 112011-02-03 18:43:19


38

Usted puede utilizar ExcelXmlWriter http://www.carlosag.net/Tools/ExcelXmlWriter/

Trabaja muy bien.


8

Recientemente he usado FlexCel.NET y encontré que es 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 la fuente completa si lo compras. Entonces supongo que podrías compilarlo en tu asamblea si realmente quisieras. De lo contrario, es solo un ensamblaje extra para copiar, sin configuración ni instalación ni nada de eso.

No creo que encuentres ninguna forma de hacerlo sin bibliotecas de terceros, ya que .NET Framework, obviamente, no tiene compatibilidad incorporada y OLE Automation es todo un mundo de dolor.


51

Unas pocas opciones que he utilizado:

Si XLSX es una necesidad: ExcelPackage es un buen comienzo, pero murió cuando el desarrollador dejó de trabajar en ella. 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 Apache POI. NPOI 2.0 (Alpha) también es compatible con XLSX.

  0

Tenga cuidado con ExcelPackage si necesita soportar XLS. Tuve un momento difícil con él y finalmente cambié a ExcelLibrary. 17 sep. 102010-09-17 13:55:24

  0

Definitivamente cierto. ExcelPackage/ExML es solo una buena opción si necesita la compatibilidad con XLSX. 21 sep. 102010-09-21 15:16:28

+2

Tenga en cuenta que ExcelPackage tiene un sucesor: EPPlus (https://epplus.codeplex.com/) que es compatible con XLSX. Mi única preocupación, en comparación con NPOI, por ejemplo, es el rendimiento, p. cuando hay muchas columnas 03 nov. 132013-11-03 19:00:31


140

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

  • ExcelPackage de OOXML formatos (Oficina 2007)

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

Tome un vistazo a mi blog:

Creating Excel spreadsheets .XLS and .XLSX in C#

NPOI with Excel Table and dynamic Chart

+5

Una nota sobre NPOI: las referencias de fila y columna están basadas en cero. Funciona bien para rellenar una plantilla existente. 30 abr. 102010-04-30 13:45:52

+3

NPOI 2 ahora está en Beta, y lo he usado en mis proyectos para exportaciones simples sin problemas. 13 ago. 132013-08-13 13:19:56

+2

Funciona. También tiene algunos de los nombres de clase y nombres de espacio más atroces jamás inventados, imitando la atrocidad del formato de datos subyacente en lugar de burlarse de él. 16 ago. 142014-08-16 23:23:07

+8

Esta pregunta y sus respuestas son realmente antiguas. NPOI es ahora el camino a seguir, y me gustaría que esta respuesta estuviera en la cima antes de perder el tiempo con EPPlus y ExcelLibrary tratando de obtener una solución que funcionara para .xls y .xlsx Obtenga las descargas de C# desde https://npoi.codeplex.com/. Y la mejor documentación que he encontrado, a pesar de que es la versión de Java, está en https://poi.apache.org/ 20 may. 152015-05-20 00:59:45

+2

NPOI se ha movido de Codeplex a [Github] (https://github.com/tonyqus/npoi) 19 jul. 172017-07-19 13:43:11


2

Yo también voto por GemBox.Spreadsheet.

Muy rápido y fácil de usar, con un montón de ejemplos en su sitio.

Realicé mis tareas de creación de informes en un nivel completamente nuevo de velocidad de ejecución.


6

Alguna automatización útil de Excel en C#, puede encontrarla en el siguiente enlace.

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

Bolton.


9

Bueno,

también se puede utilizar una biblioteca de terceros como Aspose.

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

  0

Para ser más precisos, puede usar [Aspose.Cells] (http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx) para .NET en orden para crear archivos Excel (XLS, XLSX) en su aplicación .NET. 29 ago. 112011-08-29 11:55:55

+6

Sí, puede, si no le importa pagar una tarifa mínima de licencia de $ 999. Prueba la biblioteca MikesKnowledgeBase ... ¡que cuesta $ 999 más que esto! 05 ene. 122012-01-05 13:10:00


470

Si está contento con el formato xlsx, intente con mi proyecto codeplex 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.

+5

Sí, supongo que debería. Mi "comercialización" hasta ahora es algunas publicaciones aquí. Trataré de hacer algo después de haber lanzado la nueva versión en unas pocas semanas (que incluirá cifrado y soporte de tablas y algunas otras cosas).Siéntase libre de ayudarme si lo desea :) 09 nov. 102010-11-09 07:52:26

+5

Mi biblioteca completamente libre también le permite exportar cualquier DataSet, DataTable o List <> directamente a un archivo .xlsx de Excel 2007, usando Open XML. Código fuente completo, y demostración, disponible aquí: http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm 23 nov. 112011-11-23 12:04:00

+64

La licencia ahora es LGPL, notas de la versión aquí: http://epplus.codeplex.com/releases/ view/79802 05 feb. 122012-02-05 12:30:14

+9

Los ejemplos fueron útiles. Pude cambiar mi código de usar la biblioteca de interoperabilidad de Microsoft (terriblemente lenta) a esta biblioteca (versión 4.x) en un par de horas. Mi punto de referencia escribe un archivo con dos pestañas y alrededor de 750,000 celdas. Usando MS interop tomó 13 minutos. El uso de EPPlus tomó 10 segundos, una velocidad aproximadamente 80x. ¡Muy feliz! 10 feb. 152015-02-10 18:55:49

  0

@ JanKällman Debe actualizar su página CodePlex para mostrar que tiene estos métodos disponibles: 'LoadFromCollection <T>', 'LoadFromDataTable' etc. (encontrado a través de [aquí] (http://stackoverflow.com/a/13698809/845584)) 24 feb. 152015-02-24 03:39:45

+1

Para mayor claridad en este hilo, la LGPL permite vincular el software sin que se produzca la parte infecciosa de la GPL. Solo necesita abrir los cambios de código fuente que realice en ClosedXml o si coloca directamente el código fuente (en lugar de hacer referencia a los ensamblados de ClosedXml) dentro de su aplicación, entonces necesita abrir la fuente de su aplicación. 12 ago. 152015-08-12 16:10:30

  0

@Paul Chernoch: llenamos grandes hojas de Excel con interoperabilidad muy rápidamente. El secreto es hacer una actualización masiva. Cree un bloque de objeto [,], rellene eso y luego escriba esa matriz en Excel a la vez: excelWorksheet.get_Range (range) .Value2 = block; 15 feb. 182018-02-15 22:53:00


0

puede simplemente escribirlo en XML utilizando el formato XML de Excel y asígnele el nombre .XLS y se abrirá con Excel. Se puede controlar todo el formato (negrita, anchos, etc) en el archivo XML en dirección

http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats#Excel_XML_Spreadsheet_example

+2

Esto es genial, excepto que no es compatible con gráficos o imágenes. 22 sep. 102010-09-22 16:03:52


4

Busque ExtremeML. Es una biblioteca genial que te permite usar el formato OpenXML para generar archivos OpenXML.

También es un proyecto de OpenSource.

http://www.extrememl.com/


32

Si va a crear archivos Excel 2007/2010 dan a este proyecto de código abierto una oportunidad: http://closedxml.codeplex.com

Proporciona una forma orientada a objetos para manipular los archivos (similar a VBA) sin lidiar con las molestias de los documentos XML. Se puede usar con cualquier lenguaje .NET como C# y Visual Basic (VB).

ClosedXML le permite crear archivos de Excel 2007/2010 sin la aplicación Excel . El ejemplo típico es la creación de 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"); 
+8

Intenté usar esto en un proyecto que crea hojas de Excel bastante grandes. Excelente biblioteca, pero extremadamente pobre en rendimiento. Acabo de hacer una comparación para el proyecto en el que estoy trabajando: ClosedXML (v 0.53.3) tomó 92.489 ms mientras que EPPlus (v 2.9.03, para pruebas - no podemos usar porque es GPL) tomó 16,500 ms. 08 jun. 112011-06-08 12:40:24

+1

@Druid la licencia es LGPL, suponiendo que no modifica el código fuente a ClosedXML, es gratis http://epplus.codeplex.com/license 12 ago. 152015-08-12 16:08:27


7

puede crear archivos de Excel que usan esta biblioteca con un formato agradable: http://officehelper.codeplex.com/documentation
Vea a continuación la 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 Muestra de este modo:

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}; 
    } 
} 

2

http://www.codeproject.com/KB/cs/Excel_and_C_.aspx < = ¿por qué no usar simplemente la potencia incorporada de las ventanas? Simplemente instale la oficina en el servidor; cualquier aplicación que instale se puede automatizar.

Mucho más fácil solo use los métodos nativos.

Si se instaló puede usarlo, esta es la característica más sorprendente y menos utilizada en Windows. Se denominó COM en los viejos tiempos, y le ahorra toneladas de tiempo y dolor.

O incluso más fácil sólo tiene que utilizar el árbitro lib suministros MS - http://csharp.net-informations.com/excel/csharp-create-excel.htm

  0

¿Por qué es la segunda manera más fácil? ¿No es lo mismo (agregar la biblioteca de objetos nativos a su proyecto)? ¿Necesita tener Excel instalado para que funcione esta biblioteca de objetos? 09 feb. 112011-02-09 12:45:28

+6

Microsoft no recomienda ni es compatible con Office Automation desde aplicaciones no interactivas como ASP.NET. Consulte http://support.microsoft.com/kb/257757 09 feb. 112011-02-09 18:17:35

  0

Excel es bastante fiable y lento en lo que respecta a la automatización. 25 jun. 152015-06-25 09:21:23


8

Algunos proveedores de componentes de 3 ª Parte como Infragistics o Syncfusion proporcionan muy buenas capacidades de exportación de Excel que no requieren Microsoft Excel para ser instalado. Dado que estos proveedores también proporcionan componentes de grilla UI avanzados, estos componentes son especialmente útiles si desea que el estilo y el diseño de una exportación excel imiten el estado actual de una grilla 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 IU, entonces elegiría una de las opciones de código abierto (por ejemplo, ExcelLibrary).

Anteriormente participé en proyectos que intentaban utilizar la automatización del lado del servidor en el paquete de aplicaciones de Microsoft Office. En base a esta experiencia, recomendaría encarecidamente que no se adopte ese enfoque.


6

Mire ejemplos de cómo crear archivos de Excel.

Hay ejemplos en C# y VB.NET

Gestiona archivos XSL XSLX y CSV de Excel.

http://www.devtriogroup.com/ExcelJetcell/Samples


7
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 la vista de cuadrícula a su archivo de Excel que podría ayudarle a cabo

+5

No, esto genera HTML marcado como un archivo de Excel en lugar de un verdadero archivo de Excel. Sí, Excel mismo abrirá eso, pero otros programas que consumen hojas de cálculo, incluido el visor de Excel gratuito de Microsoft, por ejemplo, no lo aceptarán. Haría mejor en crear un archivo Excel real usando una de las bibliotecas aquí. 28 abr. 112011-04-28 11:46:08

  0

También debe usar [System.Net.Mime.ContentDisposition] (http://msdn.microsoft.com/en-us/library/system.net.mime.contentdisposition.aspx) para generar el texto del encabezado de disposición de contenido en lugar de que un apéndice de cadena: eso hará frente a los nombres de archivo que contienen espacios, etc. correctamente. 28 abr. 112011-04-28 11:48:21


132

Y qué hay con Open XML SDK 2.0 para Microsoft Office?

algunos de los beneficios:

  • No requiere Office instalado
  • Hecho por Microsoft = documentación decente MSDN
  • Sólo una DLL .Net para su uso en proyectos
  • SDK viene con muchas herramientas como diff, validador, etc

Enlaces:

+2

Es importante tener en cuenta que la DLL para esto es un poco más de 5 MB y está limitada a los formatos de Office 2007. Pero ciertamente es la solución más fácil y rápida que funciona para mí. 20 sep. 112011-09-20 13:03:06

+11

Solo un aviso de que la v2.5 está descargada y puede descargarse [aquí] (http://www.microsoft.com/en-us/download/details.aspx?id=30425). 04 ene. 132013-01-04 16:47:11

+8

El SDK modela el XML en clases, de modo que cada etiqueta XML se asigna a una etiqueta, y luego tiene que crear la jerarquía de clases (cada instancia tiene una colección de instancias/etiquetas secundarias) correctamente. Esto significa que debe conocer la estructura XML de un archivo de Excel, que es muy complicado. Es mucho más fácil usar un contenedor como EPPlus, mencionado anteriormente, que simplifica las cosas. 24 dic. 142014-12-24 16:27:57

+1

Una gran muestra de Microsoft Open XML SDK - Open XML Writer se puede encontrar en http://polymathprogrammer.com/2012/08/06/how-to-properly-use-openxmlwriter-to-write-large-excel-files/O vea la solución Stack Overflow http://stackoverflow.com/questions/11370672/export-alarge-data-query-60k-rows-to-excel/42304339#42304339 17 feb. 172017-02-17 17:51:38

+3

Encontré el Open XML SDK de Microsoft Open XML SDK Se bueno. Usando las soluciones anteriores, (especialmente la muestra de Vincent Tom (Poly Math)), es fácil crear un escritor que transmita grandes conjuntos de datos y escriba registros de una manera similar y no demasiado compleja a lo que haría por CSV; pero que en cambio estás escribiendo xml Open XML es la mentalidad en la que Microsoft considera que están sus nuevos formatos de Office. Y siempre puede cambiarles el nombre desde .xslx a archivos .zip si tiene ganas de hurgar en sus contenidos XML. 17 feb. 172017-02-17 17:54:49


9

Sólo quiero añadir otra referencia a una solución de terceros que se dirige directamente a su número: http://www.officewriter.com

(Negación: Yo trabajo para SoftArtisans, la empresa que fabrica OfficeWriter)


24

He aquí un C# biblioteca completamente libre, lo que le permite exportar desde un DataSet, DataTable o List<> en un archivo .xlsx genuina Excel 2007, utilizando el bibliotecas OpenXML: se proporciona

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

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

Después de la adición de esta clase a su aplicación, puede exportar el conjunto de datos a Excel en una sola línea de código:

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

No puede ser mucho más simple que eso ...

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

  0

Esto parece un poco engañoso, ya que está solicitando una donación para obtener todas las funciones. 23 ene. 172017-01-23 15:33:19

  0

Eso es parcialmente cierto: la versión completamente gratuita generará un archivo .xlsx perfecto para usted, y se proporciona todo el código fuente. Si dona $ 10 o más a una de esas dos organizaciones benéficas (de las cuales no recibo absolutamente nada), entonces obtiene una versión "mejor" que muestra cómo hacer el formato, las fechas, etc. Dado el costo de los productos de terceros, creo donar $ 10 a una buena causa, en cambio, ¡vale la pena! 02 may. 172017-05-02 14:15:29


-4

Estoy usando el siguiente código para crear el archivo Excel 2007 que crea el archivo y escribe en ese archivo pero cuando abro el archivo pero me da error que exel no puede abrir el archivo bcz podría ser corupado o la extensión del el archivo no es compatible pero si he utilizado para el archivo de .xls que funcione multas

for (int i = 0; i < TotalFile; i++) 
{ 
    Contact.Clear(); 
    if (innerloop == SplitSize) 
    { 
     for (int j = 0; j < SplitSize; j++) 
     { 
      string strContact = DSt.Tables[0].Rows[i * SplitSize + j][0].ToString(); 
      Contact.Add(strContact); 
     } 
     string strExcel = strFileName + "_" + i.ToString() + ".xlsx"; 
         File.WriteAllLines(strExcel, Contact.ToArray()); 
    } 
} 

también se refieren enlace

http://dotnet-magic.blogspot.in/2011/10/createformat-excel-file-from-cnet.html

+1

Todo eso depende de su clase 'Contacto', y no nos ha dicho qué es eso. Si funciona para xls, es probable que esté escribiendo HTML, que no es un archivo Excel real. Y su enlace usa interoperabilidad, que [como se mencionó anteriormente] (http://stackoverflow.com/a/151014) no debe usarse en el lado del servidor y puede ser lento en el llenado de tablas grandes. 22 dic. 142014-12-22 20:48:41

+1

El contacto es una lista vinculada no es una clase.declare un enlace y lo usé porque no conozco el tamaño de los datos, así que utilicé la lista de enlaces. 23 dic. 142014-12-23 09:53:12

+1

Oh, ¿estás produciendo un archivo de texto plano con un elemento por línea? Entonces Excel lo trata como un CSV sin las comas? 23 dic. 142014-12-23 09:55:02


3

He escrito un código simple para la exportación de datos a Excel sin el uso de objetos de Excel mediante el uso del sistema. IO.StreamWriter.

A continuación se muestra el código que leerá todas las tablas del conjunto de datos y las escribirá en hojas una a una. Tomé ayuda del artículo http://www.codeproject.com/Articles/9380/Export-a-DataSet-to-Microsoft-Excel-without-the-us.

public static void exportToExcel(DataSet source, string fileName) 
{ 
     const string endExcelXML = "</Workbook>"; 
     const string startExcelXML = "<xml version>\r\n<Workbook " + 
       "xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" + 
       " xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " + 
       "xmlns:x=\"urn:schemas- microsoft-com:office:" + 
       "excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" + 
       "office:spreadsheet\">\r\n <Styles>\r\n " + 
       "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " + 
       "<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" + 
       "\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" + 
       "\r\n <Protection/>\r\n </Style>\r\n " + 
       "<Style ss:ID=\"BoldColumn\">\r\n <Font " + 
       "x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " + 
       "<Style  ss:ID=\"StringLiteral\">\r\n <NumberFormat" + 
       " ss:Format=\"@\"/>\r\n </Style>\r\n <Style " + 
       "ss:ID=\"Decimal\">\r\n <NumberFormat " + 
       "ss:Format=\"0.0000\"/>\r\n </Style>\r\n " + 
       "<Style ss:ID=\"Integer\">\r\n <NumberFormat " + 
       "ss:Format=\"0\"/>\r\n </Style>\r\n <Style " + 
       "ss:ID=\"DateLiteral\">\r\n <NumberFormat " + 
       "ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " + 
       "</Styles>\r\n "; 
     System.IO.StreamWriter excelDoc = null; 
     excelDoc = new System.IO.StreamWriter(fileName); 

     int sheetCount = 1; 
     excelDoc.Write(startExcelXML); 
     foreach (DataTable table in source.Tables) 
     { 
      int rowCount = 0; 
      excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); 
      excelDoc.Write("<Table>"); 
      excelDoc.Write("<Row>"); 
      for (int x = 0; x < table.Columns.Count; x++) 
      { 
       excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">"); 
       excelDoc.Write(table.Columns[x].ColumnName); 
       excelDoc.Write("</Data></Cell>"); 
      } 
      excelDoc.Write("</Row>"); 
      foreach (DataRow x in table.Rows) 
      { 
       rowCount++; 
       //if the number of rows is > 64000 create a new page to continue output 
       if (rowCount == 64000) 
       { 
        rowCount = 0; 
        sheetCount++; 
        excelDoc.Write("</Table>"); 
        excelDoc.Write(" </Worksheet>"); 
        excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); 
        excelDoc.Write("<Table>"); 
       } 
       excelDoc.Write("<Row>"); //ID=" + rowCount + " 
       for (int y = 0; y < table.Columns.Count; y++) 
       { 
        System.Type rowType; 
        rowType = x[y].GetType(); 
        switch (rowType.ToString()) 
        { 
         case "System.String": 
          string XMLstring = x[y].ToString(); 
          XMLstring = XMLstring.Trim(); 
          XMLstring = XMLstring.Replace("&", "&"); 
          XMLstring = XMLstring.Replace(">", ">"); 
          XMLstring = XMLstring.Replace("<", "<"); 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
              "<Data ss:Type=\"String\">"); 
          excelDoc.Write(XMLstring); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.DateTime": 
          //Excel has a specific Date Format of YYYY-MM-DD followed by 
          //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 
          //The Following Code puts the date stored in XMLDate 
          //to the format above 
          DateTime XMLDate = (DateTime)x[y]; 
          string XMLDatetoString = ""; //Excel Converted Date 
          XMLDatetoString = XMLDate.Year.ToString() + 
           "-" + 
           (XMLDate.Month < 10 ? "0" + 
           XMLDate.Month.ToString() : XMLDate.Month.ToString()) + 
           "-" + 
           (XMLDate.Day < 10 ? "0" + 
           XMLDate.Day.ToString() : XMLDate.Day.ToString()) + 
           "T" + 
           (XMLDate.Hour < 10 ? "0" + 
           XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + 
           ":" + 
           (XMLDate.Minute < 10 ? "0" + 
           XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + 
           ":" + 
           (XMLDate.Second < 10 ? "0" + 
           XMLDate.Second.ToString() : XMLDate.Second.ToString()) + 
           ".000"; 
          excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" + 
             "<Data ss:Type=\"DateTime\">"); 
          excelDoc.Write(XMLDatetoString); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Boolean": 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
             "<Data ss:Type=\"String\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Int16": 
         case "System.Int32": 
         case "System.Int64": 
         case "System.Byte": 
          excelDoc.Write("<Cell ss:StyleID=\"Integer\">" + 
            "<Data ss:Type=\"Number\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Decimal": 
         case "System.Double": 
          excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" + 
            "<Data ss:Type=\"Number\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.DBNull": 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
            "<Data ss:Type=\"String\">"); 
          excelDoc.Write(""); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         default: 
          throw (new Exception(rowType.ToString() + " not handled.")); 
        } 
       } 
       excelDoc.Write("</Row>"); 
      } 
      excelDoc.Write("</Table>"); 
      excelDoc.Write(" </Worksheet>"); 
      sheetCount++; 
     } 


     excelDoc.Write(endExcelXML); 
     excelDoc.Close(); 
    } 
  0

Como dice el artículo, ese es XML que Excel leerá en lugar de ser un archivo XLS, lo que significa que solo puede funcionar en Excel y no en otros programas que lean hojas de cálculo. ¡Pero probablemente sea mejor que la tabla HTML equivalente aquí! 23 jul. 152015-07-23 09:39:24

  0

Compatible con *** xlsx ***? _OpenXML_? 16 feb. 172017-02-16 14:52:13


9

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

mira esto OpenXML: Alternative that helps avoid installing MS Excel on Server


11

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 community license si reúne los requisitos (menos de 1 millón de dólares en ingresos). Nota: trabajo para Syncfusion.


4

La manera más simple y rápida de crear un archivo de Excel desde C# es usar la herramienta de productividad Open XML. La herramienta de productividad Open XML viene con la instalación de Open XML SDK. La herramienta realiza ingeniería inversa de 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 en cuestión es:

  1. instalar el SDK de Open XML con la herramienta.
  2. Cree un archivo de Excel utilizando el último cliente de Excel con el aspecto deseado. Llámalo DesiredLook.xlsx.
  3. Con la herramienta abierta DesiredLook.xlsx y haga clic en el botón Reflejar código cerca de la parte superior. enter image description here
  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 un extra, este método funciona para cualquier archivo de Word y PowerPoint. Como desarrollador de C#, a continuación, hará cambios en el código para satisfacer sus necesidades.

He desarrollado un simple WPF app on 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 nos remontamos una versión del archivo, se generará un archivo de Excel como esto:

enter image description here


0

Si haces tabla de datos o DataGridView a partir del código puede guardar todos los datos usando este método sencillo.este método no es recomendable pero funciona al 100%, incluso si no instalas MS Excel en tu computadora.

try 
{ 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
    saveFileDialog1.Filter = "Excel Documents (*.xls)|*.xls"; 
    saveFileDialog1.FileName = "Employee Details.xls"; 
    if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
    string fname = saveFileDialog1.FileName; 
    StreamWriter wr = new StreamWriter(fname); 
    for (int i = 0; i <DataTable.Columns.Count; i++) 
    { 
    wr.Write(DataTable.Columns[i].ToString().ToUpper() + "\t"); 
    } 
    wr.WriteLine(); 

    //write rows to excel file 
    for (int i = 0; i < (DataTable.Rows.Count); i++) 
    { 
    for (int j = 0; j < DataTable.Columns.Count; j++) 
    { 
    if (DataTable.Rows[i][j] != null) 
    { 
    wr.Write(Convert.ToString(getallData.Rows[i][j]) + "\t"); 
    } 
    else 
    { 
    wr.Write("\t"); 
    } 
    } 
    //go to next line 
    wr.WriteLine(); 
    } 
    //close file 
    wr.Close(); 
    } 
    } 
    catch (Exception) 
    { 
    MessageBox.Show("Error Create Excel Sheet!"); 
    } 

0

Hace algún tiempo, creé una DLL encima de NPOI. Es muy sencillo de utilizar:

IList<DummyPerson> dummyPeople = new List<DummyPerson>(); 
//Add data to dummyPeople... 
IExportEngine engine = new ExcelExportEngine(); 
engine.AddData(dummyPeople); 
MemoryStream memory = engine.Export(); 

Se puede leer más sobre esto en here.

Por cierto, es 100% de código abierto. Siéntase libre de usar, editar y compartir;)


0

Una opción realmente fácil que a menudo se pasa por alto es crear un informe .rdlc usando Microsoft Reporting y exportarlo a formato excel. Usted puede diseñar en Visual Studio y generar el archivo con:

localReport.Render("EXCELOPENXML", null, ((name, ext, encoding, mimeType, willSeek) => stream = new FileStream(name, FileMode.CreateNew)), out warnings); 

También puede exportar hacer .doc o .pdf, utilizando "WORDOPENXML" y "PDF" respectivamente, y está apoyado en muchas plataformas diferentes, tales como ASP.NET y SSRS.

Es mucho más fácil hacer cambios en un diseñador visual donde puede ver los resultados, y créame, una vez que comience a agrupar datos, formatear encabezados de grupo, agregar nuevas secciones, no quiere meterse con docenas de XML nodos.