# How to Create an Excel File in C# (.NET Tutorial)
La mayoría de los equipos con los que trabajo necesitan generar archivos Excel al menos tan a menudo como los leen: facturas, exportaciones, informes mensuales que el equipo de finanzas puede abrir y filtrar. He construido este flujo docenas de veces en aplicaciones de consola, servicios ASP.NET y tareas en segundo plano. La API de IronXL es lo suficientemente cercana a la forma en que Excel mismo piensa que el código se lee casi como una especificación, pero hay algunas decisiones de formato y guardado que importan más de lo que revela la superficie de la API. Esta guía es cómo realmente genero archivos XLSX en producción, incluyendo las trampas que me costaron tiempo las primeras veces.
La biblioteca funciona en .NET 8, .NET 9, .NET Core y .NET Framework, en Windows, Linux, macOS, Azure y AWS, sin Microsoft Office en el host. Las rutas de código a continuación son las mismas en todos esos destinos.
*as-heading:2(Inicio rápido: crear un archivo Excel)*
Tres líneas levantan un nuevo libro de trabajo, escriben un valor en A1, y guardan el archivo en disco. No se involucra un proceso de Excel, no hay marshaling de COM.
```cs
:title=Create Excel File in One Line!
WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
```
---
<div class="hsg-featured-snippet">
<h3>Flujo de trabajo mínimo (5 pasos)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronXL.Excel/">Descargue e instale la biblioteca C# IronXL</a></li>
<li>Configurar su proyecto .NET</li>
<li>Cree un <code>Workbook</code> y un <code>Worksheet</code></li>
<li>Establecer valores de celda, formato y fórmulas</li>
<li>Guarde su archivo de Excel</li>
</ol>
</div>
## ¿Qué es IronXL y por qué utilizarlo para la creación de archivos Excel?
[IronXL](/csharp/excel/) es una API de Excel para C# y VB.NET para leer, editar y crear archivos de hojas de cálculo. No requiere Microsoft Office ni Excel Interop, lo que mantiene la implementación en una referencia de NuGet y una directiva `using`.
IronXL es totalmente compatible con .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y ambientes de Azure.
### Características de IronXL
- Soporte humano directamente de nuestro equipo de desarrollo .NET
- Instalación rápida con Microsoft Visual Studio
- GRATIS para desarrollo. Licencias de `$liteLicense`
### ¿Cómo puedo crear y guardar rápidamente un archivo de Excel?
[Instala IronXL a través de NuGet](https://www.nuget.org/packages/IronXL.Excel/) o [descarga el DLL directamente](/csharp/excel/packages/IronXL.zip). La clase `WorkBook` es el punto de entrada para todas las operaciones de Excel, y la clase `WorkSheet` expone métodos para manipular hojas individuales. El recorrido paso a paso completo comienza en el Paso 1 a continuación.
---
## How Do I Install the IronXL C# Library?
Instale IronXL a través del Administrador de paquetes NuGet en Visual Studio o utilice la Consola del Administrador de paquetes:
```shell
:ProductInstall
```
Acceda al Administrador de paquetes NuGet a través del menú Proyecto o haciendo clic derecho en su proyecto en el Explorador de soluciones.

**Figura 3** - *Acceder al gestor de paquetes NuGet a través del menú del proyecto*

**Figura 4** - *Menú contextual en el Explorador de Soluciones*
Busque `IronXL.Excel` en la lista de paquetes y haga clic en Instalar.
<br />

**Figura 5** - *Instalación de IronXL.Excel a través del gestor de paquetes NuGet*
Alternativamente, [descargue la DLL de IronXL directamente](/csharp/excel/packages/IronXL.zip) y agrégala como referencia a su proyecto a través de Explorador de soluciones > Referencias > Buscar `IronXL.dll`.

**Figura 6** - *Descargar la biblioteca de IronXL desde el sitio web oficial*
[[i:(IronXL no requiere instalación de Microsoft Office o Excel Interop. Funciona en cualquier plataforma soportada por .NET incluyendo Windows, Linux, macOS y entornos en la nube.)}
)]]
---
## ¿Cómo configuro mi proyecto .NET?
IronXL funciona con cualquier **tipo de proyecto de .NET**: aplicaciones de consola, aplicaciones web ASP.NET, APIs o herramientas de escritorio. El ejemplo a continuación utiliza una Aplicación Web ASP.NET, pero las mismas rutas de código funcionan en todas las plantillas de proyecto.
Sigue estos pasos para crear un sitio web ASP.NET:
1. Abre Visual Studio
2. Haga clic en Archivo > Nuevo proyecto
3. Selecciona Web bajo Visual C# en la lista de tipos de proyectos
4. Selecciona Aplicación Web ASP.NET
<br />
<center>
<a rel="nofollow" href="/img/tutorials/create-excel-file-net/new-project-asp-net.png" target="_blank"><p><img src="/img/tutorials/create-excel-file-net/new-project-asp-net.png" alt="Cuadro de diálogo Nuevo proyecto de Visual Studio con la aplicación web ASP.NET seleccionada" class="img-responsive add-shadow img-margin" style="max-width:100%; margin: 0;" /></p></a>
</center>
<strong style="margin-left: 40px;">Figura 1</strong> – *Create new ASP.NET project*
5. Haz clic en OK
6. Selecciona plantilla de formularios Web
<center>
<a rel="nofollow" href="/img/tutorials/create-excel-file-net/web-form.png" target="_blank"><p><img src="/img/tutorials/create-excel-file-net/web-form.png" alt="Selección de plantilla de proyecto ASP.NET que muestra la opción Formularios web" class="img-responsive add-shadow img-margin" style="max-width:100%; margin: 0;" /></p></a>
</center>
<strong style="margin-left: 40px;">Figura 2</strong> – *Select Web Forms template*
<br />
7. Haz clic en OK
Con tu proyecto listo, instala IronXL para comenzar a crear archivos de Excel de manera programática.
---
## How Do I Create an Excel Workbook in C#?
Un nuevo libro de trabajo es una sola llamada a `WorkBook.Create`, con el formato de archivo pasado como un enumerador:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
```
El método `Create` admite formatos tanto XLS (Excel 97-2003) como XLSX (Excel 2007+). Se recomienda XLSX para un mejor rendimiento y tamaños de archivo más pequeños.
- **XLSX** : recomendado para todas las versiones modernas de Excel (2007+): archivos más pequeños, mejor rendimiento
- **XLS** : formato heredado para compatibilidad con Excel 97–2003
### ¿Cómo agrego una hoja de trabajo a mi libro de trabajo?
Agregue hojas de trabajo a través de `CreateWorkSheet`:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
```
Un libro contiene una o más hojas de trabajo. Cada hoja de trabajo se compone de filas y columnas, con celdas en sus intersecciones. Utilice el método `CreateWorkSheet` para agregar nuevas hojas a su libro de trabajo.
- `WorkBook.CreateWorkSheet(String)`: Agrega una nueva hoja con el nombre de pestaña dado
- `WorkSheet`: Recupera una hoja existente por nombre
- Los nombres de las hojas deben ser únicos dentro de un libro de trabajo
---
## ¿Cómo establezco valores de celda en Excel?
### ¿Cómo puedo establecer valores de celda manualmente?
El acceso a celdas utiliza las mismas cadenas de dirección estilo A1 que ves en Excel:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
```
La propiedad `Value` acepta varios tipos de datos, incluidos cadenas de texto, números, fechas y booleanos. IronXL formatea automáticamente las celdas según el tipo de dato.
### ¿Cómo puedo establecer valores de celda dinámicamente?
Cuando la cuenta de filas se conoce en tiempo de ejecución, la interpolación de cadenas hace que el cuerpo del bucle sea fácil de leer:
```csharp
// Initialize random number generator for sample data
Random r = new Random();
// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
// Set different budget categories with increasing ranges
workSheet[$"A{i}"].Value = r.Next(1, 1000); // Office Supplies
workSheet[$"B{i}"].Value = r.Next(1000, 2000); // Utilities
workSheet[$"C{i}"].Value = r.Next(2000, 3000); // Rent
workSheet[$"D{i}"].Value = r.Next(3000, 4000); // Salaries
workSheet[$"E{i}"].Value = r.Next(4000, 5000); // Marketing
workSheet[$"F{i}"].Value = r.Next(5000, 6000); // IT Services
workSheet[$"G{i}"].Value = r.Next(6000, 7000); // Travel
workSheet[$"H{i}"].Value = r.Next(7000, 8000); // Training
workSheet[$"I{i}"].Value = r.Next(8000, 9000); // Insurance
workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}
// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
```
La interpolación de cadenas (`$"..."`) facilita la referencia dinámica de celdas. El indexador `Item` admite tanto celdas individuales como rangos.
### ¿Cómo puedo completar un Excel desde una base de datos?
Cargar datos desde bases de datos a Excel es un requisito común:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
```
Este ejemplo demuestra la lectura de datos de Excel desde bases de datos, aplicando formato y usando fórmulas para cálculos. La propiedad `NumberFormat` permite formatear números de forma personalizada al igual que en Excel.
---
## ¿Cómo aplico formato a las celdas de Excel?
### ¿Cómo puedo configurar colores de fondo en Excel?
Fondos, colores de fila alternados y sobrescrituras de colores de fuentes, todo pasa a través del objeto `Style` en una celda o rango:
```csharp
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February
// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text
// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
if (row % 2 == 0)
{
workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
}
}
```
El método `SetBackgroundColor` acepta códigos de color hexadecimales. Combine colores de fondo con `Font.FontColor` para mantener el contraste legible en rellenos más oscuros.
### ¿Cómo creo bordes en Excel?
Los bordes ayudan a definir regiones de datos y mejorar la estructura:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
```
IronXL admite varios [tipos de borde](/csharp/excel/object-reference/api/IronXL.Styles.BorderType.html) incluidos delgado, medio, grueso, doble, punteado y discontinuo. Cada lado del borde puede ser estilizado de forma independiente.
---
## How Do I Use Excel Formulas in C#?
IronXL evalúa las fórmulas de Excel en el momento de escritura, por lo que los valores son correctos tan pronto como se guarda el libro de trabajo:
```csharp
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();
// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";
// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";
// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";
// Ensure all formulas calculate
workSheet.EvaluateAll();
```
La clase `Range` proporciona métodos como `Sum`, `Average`, `Max` y `Min` para cálculos rápidos. Para escenarios más complejos, use la propiedad `Formula` para establecer fórmulas de Excel directamente.
Prefiera los métodos integrados de IronXL `.Sum()`, `.Avg()`, `.Max()` y `.Min()` sobre cadenas de fórmulas crudas cuando trabaje con rangos. Son seguros por tipo y evitan errores de sintaxis de fórmulas en tiempo de compilación.)}
---
## ¿Cómo configuro las propiedades de la hoja de cálculo y de impresión?
Usa IronXL para proteger hojas individuales, congelar filas y columnas, y establecer opciones de formato de impresión.
### ¿Cómo puedo configurar las propiedades de la hoja de trabajo?
Protege hojas de trabajo y controla las opciones de visualización:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
```
La protección de hojas previene modificaciones accidentales mientras que [congelar paneles](/csharp/excel/how-to/add-freeze-panes/) mantiene filas o columnas importantes visibles durante el desplazamiento.

**Figura 7** - *La fila de encabezado congelada permanece visible mientras se desplaza*

**Figura 8** - *La protección con contraseña evita ediciones no autorizadas*
### ¿Cómo configuro los ajustes de página e impresión?
Las opciones de diseño de impresión (orientación, tamaño de papel, márgenes, escalado, encabezados, pies de página) se exponen a través de `WorkSheet.PrintSetup`:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
```
La clase `IPrintSetup` proporciona opciones de configuración de impresión completas que coinciden con la configuración de impresión de Excel.

**Figura 9** - *Vista previa de impresión con orientación horizontal y márgenes personalizados*
---
## ¿Cómo guardo mi libro de Excel?
Guarda tu libro en varios formatos:
```csharp
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");
// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");
// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");
// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");
// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
workBook.SaveAs(stream);
byte[] excelData = stream.ToArray();
// Send to client or save to cloud
}
// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
```
IronXL admite múltiples [formatos de exportación](/csharp/excel/how-to/convert-spreadsheet-file-types/) incluidos XLSX, XLS, CSV, TSV y JSON. El método `Save` elige el formato a partir de la extensión del archivo.
- **XLSX / XLS** : formato Excel completo con formato, fórmulas y varias hojas
- **CSV**: Texto plano para intercambio de datos, una hoja por archivo
- **JSON** : Salida estructurada para API web y canalizaciones de datos
- **Stream**: Salida en memoria, útil para descargas web o almacenamiento en la nube
### ¿Cuánto tiempo lleva realmente la generación?
Ejecuté un benchmark de generación en una caja con Windows 11 (.NET 9.0.7) para obtener números concretos para un libro de trabajo del tamaño que terminan la mayoría de las exportaciones de producción. El arnés construye un XLSX de 10,000 filas y tres columnas en memoria y lo escribe en disco en una sola llamada `SaveAs`, tanto en frío como en caliente. El proyecto completo está en el [proyecto de ejemplo CreateExcelBenchmark](#sample-project) a continuación. Tres lanzamientos de proceso por separado aterrizaron aproximadamente aquí:
| Operación | Primera ejecución en frío (proceso fresco) | Promedio cálido sobre 10 iteraciones |
|---|---|---|
|Construya un XLSX de 10,000 filas, 3 columnas y `SaveAs` una vez|~570–910 ms| ~350 ms (rango 240–450 ms) |
El número en frío está dominado por la carga de ensamblajes de IronXL y el calentamiento de JIT. Una vez que el proceso está caliente, la generación cae a un rango de alrededor de 300 ms con alguna variación de ejecución a ejecución por actividad de fondo. Para libros de trabajo sustancialmente más grandes (cientos de miles de filas, múltiples hojas, estilo pesado), escribo todo el libro de trabajo en memoria y llamo a `SaveAs` exactamente una vez al final. La causa más común de los tickets "¿por qué mi exportación es tan lenta?" que vemos es llamar a `SaveAs` repetidamente dentro de un bucle mientras el libro de trabajo está creciendo: cada guardado serializa todo el estado actual, por lo que el costo sube con cada iteración.
---
## Errores Comunes
Algunas cosas afectan a las personas con suficiente frecuencia como para merecer su propia sección.
### Olvidar `FormatString` en fechas y moneda
La trampa de formato que más veo: establecer `.Value` en un `DateTime` pero olvidar `FormatString`. La fecha se almacena correctamente, pero Excel la muestra como un número de serie crudo (45292 significa 2024-01-01) hasta que aplique una cadena de formato como `"yyyy-MM-dd"`. La moneda tiene el mismo problema: el número está correcto, pero sin `"$#,##0.00"` se representa como un decimal simple. Ahora escribo el valor y el formato en líneas adyacentes, por lo que los dos no pueden separarse:
```cs
var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";
var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
```
### XLS truncará silenciosamente en 65,536 filas
Este se menciona en la sección de elección de formato cerca de la parte superior del artículo, pero se gana su lugar aquí porque el modo de falla es silencioso: `ExcelFileFormat.XLS` se limita a 65,536 filas por hoja, y las filas más allá de ese límite se eliminan sin excepción ni advertencia. La exportación "tiene éxito" y tus datos desaparecen. Elige XLSX para cualquier cosa con muchos datos, a menos que un sistema posterior literalmente no pueda leerlo.
### "Excel dice que el archivo está corrupto"
Si un archivo generado se niega a abrirse o Excel dice que está corrupto, la causa casi siempre es una de dos cosas. O el flujo de archivos no fue desechado correctamente, por lo que los bytes en el disco están truncados; o escribiste en una ruta que todavía estaba bloqueada por una ejecución anterior, y solo parte de los datos pasó. Asegúrese de que `SaveAs` (o el flujo que lo envuelve) haya terminado completamente antes de que algo más toque el archivo, y prefiera un bloque `using` alrededor de cualquier `MemoryStream` o `FileStream` en el que envuelva un libro de trabajo.
<a id="sample-project"></a>
### Proyecto de ejemplo para los números de referencia
Si deseas reproducir los números de tiempo de antes, el arnés es una pequeña aplicación de consola .NET 9:
```cs
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
```
Ejecute esto bajo `dotnet run -c Release` e intercambie sus propios conteos de filas, conteos de columnas o estilizaciones para ver cómo cambian los números con la complejidad del libro de trabajo.
---
## Referencia de objetos y recursos
La [Referencia de API de IronXL](/csharp/excel/object-reference/api/) cubre cada clase y método que este tutorial toca y los que no.
Tutoriales adicionales para operaciones relacionadas con Excel:
- [Leer y editar archivos Excel existentes](/csharp/excel/tutorials/how-to-read-excel-file-csharp/)
- [Combinar celdas en Excel](/csharp/excel/how-to/csharp-excel-merge-cells/)
- [Crear gráficos de Excel en C#](/csharp/excel/how-to/csharp-excel-chart-create-edit-tutorial/)
- [Guía de formato y estilo de celdas](/csharp/excel/how-to/set-cell-data-format/)
- [Convertir entre formatos de hojas de cálculo](/csharp/excel/how-to/convert-spreadsheet-file-types/)
## Resumen
`IronXL.Excel` genera libros de trabajo de Excel en XLSX, XLS, CSV, y JSON sin depender de Microsoft Office o Interop. La receta que sigo en cada proyecto es la misma: crear el libro de trabajo, agregar una hoja de trabajo, escribir valores y fórmulas, establecer cadenas de formato donde importa la visualización, y guardar una vez al final.
¿Listo para usar IronXL en producción? [Empieza tu prueba gratuita](trial-license) o [ve las opciones de licencias](/csharp/excel/licensing/).
La mayoría de los equipos con los que trabajo necesitan generar archivos Excel al menos tan a menudo como los leen: facturas, exportaciones, informes mensuales que el equipo de finanzas puede abrir y filtrar. He construido este flujo docenas de veces en aplicaciones de consola, servicios ASP.NET y tareas en segundo plano. La API de IronXL es lo suficientemente cercana a la forma en que Excel mismo piensa que el código se lee casi como una especificación, pero hay algunas decisiones de formato y guardado que importan más de lo que revela la superficie de la API. Esta guía es cómo realmente genero archivos XLSX en producción, incluyendo las trampas que me costaron tiempo las primeras veces.
La biblioteca funciona en .NET 8, .NET 9, .NET Core y .NET Framework, en Windows, Linux, macOS, Azure y AWS, sin Microsoft Office en el host. Las rutas de código a continuación son las mismas en todos esos destinos.
Inicio rápido: crear un archivo Excel
Tres líneas levantan un nuevo libro de trabajo, escriben un valor en A1, y guardan el archivo en disco. No se involucra un proceso de Excel, no hay marshaling de COM.
1Install IronXL with NuGet Package Manager
PM > Install-Package IronXL.Excel
Install-Package IronXL.Excel
2Copie y ejecute este fragmento de código.
WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
C#
3Despliegue para probar en su entorno real
Comienza a usar IronXL en tu proyecto hoy mismo con una prueba gratuita
¿Qué es IronXL y por qué utilizarlo para la creación de archivos Excel?
IronXL es una API de Excel para C# y VB.NET para leer, editar y crear archivos de hojas de cálculo. No requiere Microsoft Office ni Excel Interop, lo que mantiene la implementación en una referencia de NuGet y una directiva using.
IronXL es totalmente compatible con .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y ambientes de Azure.
Características de IronXL
Soporte humano directamente de nuestro equipo de desarrollo .NET
Instalación rápida con Microsoft Visual Studio
GRATIS para desarrollo. Licencias de $999
¿Cómo puedo crear y guardar rápidamente un archivo de Excel?
Instala IronXL a través de NuGet o descarga el DLL directamente. La clase WorkBook es el punto de entrada para todas las operaciones de Excel, y la clase WorkSheet expone métodos para manipular hojas individuales. El recorrido paso a paso completo comienza en el Paso 1 a continuación.
How Do I Install the IronXL C# Library?
Instale IronXL a través del Administrador de paquetes NuGet en Visual Studio o utilice la Consola del Administrador de paquetes:
PM > Install-Package IronXL.Excel
Install-Package IronXL.Excel
Acceda al Administrador de paquetes NuGet a través del menú Proyecto o haciendo clic derecho en su proyecto en el Explorador de soluciones.
Figura 3 - Acceder al gestor de paquetes NuGet a través del menú del proyecto
Figura 4 - Menú contextual en el Explorador de Soluciones
Busque IronXL.Excel en la lista de paquetes y haga clic en Instalar.
Figura 5 - Instalación de IronXL.Excel a través del gestor de paquetes NuGet
Alternativamente, descargue la DLL de IronXL directamente y agrégala como referencia a su proyecto a través de Explorador de soluciones > Referencias > Buscar IronXL.dll.
Figura 6 - Descargar la biblioteca de IronXL desde el sitio web oficial
Por favor nota: IronXL no requiere instalación de Microsoft Office o Excel Interop. Funciona en cualquier plataforma soportada por .NET incluyendo Windows, Linux, macOS y entornos en la nube.)}
¿Cómo configuro mi proyecto .NET?
IronXL funciona con cualquier tipo de proyecto de .NET: aplicaciones de consola, aplicaciones web ASP.NET, APIs o herramientas de escritorio. El ejemplo a continuación utiliza una Aplicación Web ASP.NET, pero las mismas rutas de código funcionan en todas las plantillas de proyecto.
Sigue estos pasos para crear un sitio web ASP.NET:
Abre Visual Studio
Haga clic en Archivo > Nuevo proyecto
Selecciona Web bajo Visual C# en la lista de tipos de proyectos
Selecciona Aplicación Web ASP.NET
Figura 1 – Create new ASP.NET project
Haz clic en OK
Selecciona plantilla de formularios Web
Figura 2 – Select Web Forms template
Haz clic en OK
Con tu proyecto listo, instala IronXL para comenzar a crear archivos de Excel de manera programática.
How Do I Create an Excel Workbook in C#?
Un nuevo libro de trabajo es una sola llamada a WorkBook.Create, con el formato de archivo pasado como un enumerador:
Dim workSheet AsWorkSheet = workBook.CreateWorkSheet("2020 Budget")
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
El método Create admite formatos tanto XLS (Excel 97-2003) como XLSX (Excel 2007+). Se recomienda XLSX para un mejor rendimiento y tamaños de archivo más pequeños.
XLSX : recomendado para todas las versiones modernas de Excel (2007+): archivos más pequeños, mejor rendimiento
XLS : formato heredado para compatibilidad con Excel 97–2003
¿Cómo agrego una hoja de trabajo a mi libro de trabajo?
Agregue hojas de trabajo a través de CreateWorkSheet:
Un libro contiene una o más hojas de trabajo. Cada hoja de trabajo se compone de filas y columnas, con celdas en sus intersecciones. Utilice el método CreateWorkSheet para agregar nuevas hojas a su libro de trabajo.
WorkBook.CreateWorkSheet(String): Agrega una nueva hoja con el nombre de pestaña dado
WorkSheet: Recupera una hoja existente por nombre
Los nombres de las hojas deben ser únicos dentro de un libro de trabajo
¿Cómo establezco valores de celda en Excel?
¿Cómo puedo establecer valores de celda manualmente?
El acceso a celdas utiliza las mismas cadenas de dirección estilo A1 que ves en Excel:
Dim r As New Random()
For i As Integer = 2 To 11
workSheet("A" & i).Value = r.Next(1, 1000)
workSheet("B" & i).Value = r.Next(1000, 2000)
workSheet("C" & i).Value = r.Next(2000, 3000)
workSheet("D" & i).Value = r.Next(3000, 4000)
workSheet("E" & i).Value = r.Next(4000, 5000)
workSheet("F" & i).Value = r.Next(5000, 6000)
workSheet("G" & i).Value = r.Next(6000, 7000)
workSheet("H" & i).Value = r.Next(7000, 8000)
workSheet("I" & i).Value = r.Next(8000, 9000)
workSheet("J" & i).Value = r.Next(9000, 10000)
workSheet("K" & i).Value = r.Next(10000, 11000)
workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
La propiedad Value acepta varios tipos de datos, incluidos cadenas de texto, números, fechas y booleanos. IronXL formatea automáticamente las celdas según el tipo de dato.
¿Cómo puedo establecer valores de celda dinámicamente?
Cuando la cuenta de filas se conoce en tiempo de ejecución, la interpolación de cadenas hace que el cuerpo del bucle sea fácil de leer:
// Initialize random number generator for sample dataRandom r = new Random();// Populate cells with random budget data for each monthfor (int i = 2; i <= 11; i++){ // Set different budget categories with increasing ranges workSheet[$"A{i}"].Value = r.Next(1, 1000); // Office Supplies workSheet[$"B{i}"].Value = r.Next(1000, 2000); // Utilities workSheet[$"C{i}"].Value = r.Next(2000, 3000); // Rent workSheet[$"D{i}"].Value = r.Next(3000, 4000); // Salaries workSheet[$"E{i}"].Value = r.Next(4000, 5000); // Marketing workSheet[$"F{i}"].Value = r.Next(5000, 6000); // IT Services workSheet[$"G{i}"].Value = r.Next(6000, 7000); // Travel workSheet[$"H{i}"].Value = r.Next(7000, 8000); // Training workSheet[$"I{i}"].Value = r.Next(8000, 9000); // Insurance workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc}// Alternative: Set range of cells with same valueworkSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();
// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
// Set different budget categories with increasing ranges
workSheet[$"A{i}"].Value = r.Next(1, 1000); // Office Supplies
workSheet[$"B{i}"].Value = r.Next(1000, 2000); // Utilities
workSheet[$"C{i}"].Value = r.Next(2000, 3000); // Rent
workSheet[$"D{i}"].Value = r.Next(3000, 4000); // Salaries
workSheet[$"E{i}"].Value = r.Next(4000, 5000); // Marketing
workSheet[$"F{i}"].Value = r.Next(5000, 6000); // IT Services
workSheet[$"G{i}"].Value = r.Next(6000, 7000); // Travel
workSheet[$"H{i}"].Value = r.Next(7000, 8000); // Training
workSheet[$"I{i}"].Value = r.Next(8000, 9000); // Insurance
workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}
// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample dataDim r As New Random()' Populate cells with random budget data for each monthFor i AsInteger = 2 To 11 ' Set different budget categories with increasing ranges workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research workSheet($"L{i}").Value = r.Next(11000, 12000) ' MiscNext i' Alternative: Set range of cells with same valueworkSheet("A13:L13").Value = 0 ' Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()
' Populate cells with random budget data for each month
For i As Integer = 2 To 11
' Set different budget categories with increasing ranges
workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i
' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
La interpolación de cadenas ($"...") facilita la referencia dinámica de celdas. El indexador Item admite tanto celdas individuales como rangos.
¿Cómo puedo completar un Excel desde una base de datos?
Cargar datos desde bases de datos a Excel es un requisito común:
Este ejemplo demuestra la lectura de datos de Excel desde bases de datos, aplicando formato y usando fórmulas para cálculos. La propiedad NumberFormat permite formatear números de forma personalizada al igual que en Excel.
¿Cómo aplico formato a las celdas de Excel?
¿Cómo puedo configurar colores de fondo en Excel?
Fondos, colores de fila alternados y sobrescrituras de colores de fuentes, todo pasa a través del objeto Style en una celda o rango:
// Set header row background to light gray using hex colorworkSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");// Apply different colors for data categorizationworkSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for JanuaryworkSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February// Highlight important cells with bold colorsworkSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totalsworkSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text// Create alternating row colors for better readabilityfor (int row = 2; row <= 11; row++){ if (row % 2 == 0) { workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2"); }}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February
// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text
// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
if (row % 2 == 0)
{
workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
}
}
' Set header row background to light gray using hex colorworkSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")' Apply different colors for data categorizationworkSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for JanuaryworkSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February' Highlight important cells with bold colorsworkSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totalsworkSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text' Create alternating row colors for better readabilityFor row AsInteger = 2 To 11 If row Mod2 = 0 Then workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2") End IfNext row
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February
' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text
' Create alternating row colors for better readability
For row As Integer = 2 To 11
If row Mod 2 = 0 Then
workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
End If
Next row
El método SetBackgroundColor acepta códigos de color hexadecimales. Combine colores de fondo con Font.FontColor para mantener el contraste legible en rellenos más oscuros.
¿Cómo creo bordes en Excel?
Los bordes ayudan a definir regiones de datos y mejorar la estructura:
// Use IronXL built-in aggregationsdecimal sum = workSheet["A2:A11"].Sum();decimal avg = workSheet["B2:B11"].Avg();decimal max = workSheet["C2:C11"].Max();decimal min = workSheet["D2:D11"].Min();// Assign value to cellsworkSheet["A12"].Value = sum;workSheet["B12"].Value = avg;workSheet["C12"].Value = max;workSheet["D12"].Value = min;
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();
// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregationsDim sum AsDecimal = workSheet("A2:A11").Sum()Dim avg AsDecimal = workSheet("B2:B11").Avg()Dim max AsDecimal = workSheet("C2:C11").Max()Dim min AsDecimal = workSheet("D2:D11").Min()' Assign value to cellsworkSheet("A12").Value = sumworkSheet("B12").Value = avgworkSheet("C12").Value = maxworkSheet("D12").Value = min
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()
' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
IronXL admite varios tipos de borde incluidos delgado, medio, grueso, doble, punteado y discontinuo. Cada lado del borde puede ser estilizado de forma independiente.
How Do I Use Excel Formulas in C#?
IronXL evalúa las fórmulas de Excel en el momento de escritura, por lo que los valores son correctos tan pronto como se guarda el libro de trabajo:
// Use built-in aggregation functions for rangesdecimal sum = workSheet["A2:A11"].Sum();decimal avg = workSheet["B2:B11"].Avg();decimal max = workSheet["C2:C11"].Max();decimal min = workSheet["D2:D11"].Min();// Assign calculated values to cellsworkSheet["A12"].Value = sum;workSheet["B12"].Value = avg;workSheet["C12"].Value = max;workSheet["D12"].Value = min;// Or use Excel formulas directlyworkSheet["A12"].Formula = "=SUM(A2:A11)";workSheet["B12"].Formula = "=AVERAGE(B2:B11)";workSheet["C12"].Formula = "=MAX(C2:C11)";workSheet["D12"].Formula = "=MIN(D2:D11)";// Complex formulas with multiple functionsworkSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";// Percentage calculationsworkSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";workSheet["G12"].FormatString = "0.00%";// Ensure all formulas calculateworkSheet.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();
// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";
// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";
// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";
// Ensure all formulas calculate
workSheet.EvaluateAll();
' Use built-in aggregation functions for rangesDim sum AsDecimal = workSheet("A2:A11").Sum()Dim avg AsDecimal = workSheet("B2:B11").Avg()Dim max AsDecimal = workSheet("C2:C11").Max()Dim min AsDecimal = workSheet("D2:D11").Min()' Assign calculated values to cellsworkSheet("A12").Value = sumworkSheet("B12").Value = avgworkSheet("C12").Value = maxworkSheet("D12").Value = min' Or use Excel formulas directlyworkSheet("A12").Formula = "=SUM(A2:A11)"workSheet("B12").Formula = "=AVERAGE(B2:B11)"workSheet("C12").Formula = "=MAX(C2:C11)"workSheet("D12").Formula = "=MIN(D2:D11)"' Complex formulas with multiple functionsworkSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"' Percentage calculationsworkSheet("G12").Formula = "=G11/SUM(G2:G11)*100"workSheet("G12").FormatString = "0.00%"' Ensure all formulas calculateworkSheet.EvaluateAll()
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()
' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"
' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"
' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"
' Ensure all formulas calculate
workSheet.EvaluateAll()
La clase Range proporciona métodos como Sum, Average, Max y Min para cálculos rápidos. Para escenarios más complejos, use la propiedad Formula para establecer fórmulas de Excel directamente.
Prefiera los métodos integrados de IronXL .Sum(), .Avg(), .Max() y .Min() sobre cadenas de fórmulas crudas cuando trabaje con rangos. Son seguros por tipo y evitan errores de sintaxis de fórmulas en tiempo de compilación.)}
¿Cómo configuro las propiedades de la hoja de cálculo y de impresión?
Usa IronXL para proteger hojas individuales, congelar filas y columnas, y establecer opciones de formato de impresión.
¿Cómo puedo configurar las propiedades de la hoja de trabajo?
Protege hojas de trabajo y controla las opciones de visualización:
La protección de hojas previene modificaciones accidentales mientras que congelar paneles mantiene filas o columnas importantes visibles durante el desplazamiento.
Figura 7 - La fila de encabezado congelada permanece visible mientras se desplaza
Figura 8 - La protección con contraseña evita ediciones no autorizadas
¿Cómo configuro los ajustes de página e impresión?
Las opciones de diseño de impresión (orientación, tamaño de papel, márgenes, escalado, encabezados, pies de página) se exponen a través de WorkSheet.PrintSetup:
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
workBook.SaveAs("Budget.xlsx")
La clase IPrintSetup proporciona opciones de configuración de impresión completas que coinciden con la configuración de impresión de Excel.
Figura 9 - Vista previa de impresión con orientación horizontal y márgenes personalizados
¿Cómo guardo mi libro de Excel?
Guarda tu libro en varios formatos:
// Save as XLSX (recommended for modern Excel)workBook.SaveAs("Budget.xlsx");// Save as XLS for legacy compatibilityworkBook.SaveAs("Budget.xls");// Save as CSV for data exchangeworkBook.SaveAsCsv("Budget.csv");// Save as JSON for web applicationsworkBook.SaveAsJson("Budget.json");// Save to stream for web downloads or cloud storageusing (var stream = new MemoryStream()){ workBook.SaveAs(stream); byte[] excelData = stream.ToArray(); // Send to client or save to cloud}// Save with specific encoding for international charactersworkBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");
// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");
// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");
// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");
// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
workBook.SaveAs(stream);
byte[] excelData = stream.ToArray();
// Send to client or save to cloud
}
// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)workBook.SaveAs("Budget.xlsx")' Save as XLS for legacy compatibilityworkBook.SaveAs("Budget.xls")' Save as CSV for data exchangeworkBook.SaveAsCsv("Budget.csv")' Save as JSON for web applicationsworkBook.SaveAsJson("Budget.json")' Save to stream for web downloads or cloud storageUsing stream = New MemoryStream() workBook.SaveAs(stream) Dim excelData() AsByte = stream.ToArray() ' Send to client or save to cloudEndUsing' Save with specific encoding for international charactersworkBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")
' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")
' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")
' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")
' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
workBook.SaveAs(stream)
Dim excelData() As Byte = stream.ToArray()
' Send to client or save to cloud
End Using
' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
IronXL admite múltiples formatos de exportación incluidos XLSX, XLS, CSV, TSV y JSON. El método Save elige el formato a partir de la extensión del archivo.
XLSX / XLS : formato Excel completo con formato, fórmulas y varias hojas
CSV: Texto plano para intercambio de datos, una hoja por archivo
JSON : Salida estructurada para API web y canalizaciones de datos
Stream: Salida en memoria, útil para descargas web o almacenamiento en la nube
¿Cuánto tiempo lleva realmente la generación?
Ejecuté un benchmark de generación en una caja con Windows 11 (.NET 9.0.7) para obtener números concretos para un libro de trabajo del tamaño que terminan la mayoría de las exportaciones de producción. El arnés construye un XLSX de 10,000 filas y tres columnas en memoria y lo escribe en disco en una sola llamada SaveAs, tanto en frío como en caliente. El proyecto completo está en el proyecto de ejemplo CreateExcelBenchmark a continuación. Tres lanzamientos de proceso por separado aterrizaron aproximadamente aquí:
Operación
Primera ejecución en frío (proceso fresco)
Promedio cálido sobre 10 iteraciones
Construya un XLSX de 10,000 filas, 3 columnas y SaveAs una vez
~570–910 ms
~350 ms (rango 240–450 ms)
El número en frío está dominado por la carga de ensamblajes de IronXL y el calentamiento de JIT. Una vez que el proceso está caliente, la generación cae a un rango de alrededor de 300 ms con alguna variación de ejecución a ejecución por actividad de fondo. Para libros de trabajo sustancialmente más grandes (cientos de miles de filas, múltiples hojas, estilo pesado), escribo todo el libro de trabajo en memoria y llamo a SaveAs exactamente una vez al final. La causa más común de los tickets "¿por qué mi exportación es tan lenta?" que vemos es llamar a SaveAs repetidamente dentro de un bucle mientras el libro de trabajo está creciendo: cada guardado serializa todo el estado actual, por lo que el costo sube con cada iteración.
Errores Comunes
Algunas cosas afectan a las personas con suficiente frecuencia como para merecer su propia sección.
Olvidar FormatString en fechas y moneda
La trampa de formato que más veo: establecer .Value en un DateTime pero olvidar FormatString. La fecha se almacena correctamente, pero Excel la muestra como un número de serie crudo (45292 significa 2024-01-01) hasta que aplique una cadena de formato como "yyyy-MM-dd". La moneda tiene el mismo problema: el número está correcto, pero sin "$#,##0.00" se representa como un decimal simple. Ahora escribo el valor y el formato en líneas adyacentes, por lo que los dos no pueden separarse:
Dim dateCell = sheet("A2")
dateCell.Value = DateTime.Today
dateCell.FormatString = "yyyy-MM-dd"
Dim moneyCell = sheet("B2")
moneyCell.Value = 1499.95D
moneyCell.FormatString = "$#,##0.00"
XLS truncará silenciosamente en 65,536 filas
Este se menciona en la sección de elección de formato cerca de la parte superior del artículo, pero se gana su lugar aquí porque el modo de falla es silencioso: ExcelFileFormat.XLS se limita a 65,536 filas por hoja, y las filas más allá de ese límite se eliminan sin excepción ni advertencia. La exportación "tiene éxito" y tus datos desaparecen. Elige XLSX para cualquier cosa con muchos datos, a menos que un sistema posterior literalmente no pueda leerlo.
"Excel dice que el archivo está corrupto"
Si un archivo generado se niega a abrirse o Excel dice que está corrupto, la causa casi siempre es una de dos cosas. O el flujo de archivos no fue desechado correctamente, por lo que los bytes en el disco están truncados; o escribiste en una ruta que todavía estaba bloqueada por una ejecución anterior, y solo parte de los datos pasó. Asegúrese de que SaveAs (o el flujo que lo envuelve) haya terminado completamente antes de que algo más toque el archivo, y prefiera un bloque using alrededor de cualquier MemoryStream o FileStream en el que envuelva un libro de trabajo.
Proyecto de ejemplo para los números de referencia
Si deseas reproducir los números de tiempo de antes, el arnés es una pequeña aplicación de consola .NET 9:
// CreateExcelBenchmark/Program.cs (excerpt)IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");var sw = Stopwatch.StartNew();var workbook = WorkBook.Create(ExcelFileFormat.XLSX);var sheet = workbook.CreateWorkSheet("Data");sheet["A1"].Value = "Id";sheet["B1"].Value = "Name";sheet["C1"].Value = "Amount";for (int i = 0; i < 10_000; i++){ int row = i + 2; sheet[$"A{row}"].Value = i + 1; sheet[$"B{row}"].Value = $"Item {i + 1}"; sheet[$"C{row}"].Value = (i + 1) * 1.25m;}workbook.SaveAs("Generated.xlsx");sw.Stop();Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
// CreateExcelBenchmark/Program.cs (excerpt)
IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");
var sw = Stopwatch.StartNew();
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var sheet = workbook.CreateWorkSheet("Data");
sheet["A1"].Value = "Id";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Amount";
for (int i = 0; i < 10_000; i++)
{
int row = i + 2;
sheet[$"A{row}"].Value = i + 1;
sheet[$"B{row}"].Value = $"Item {i + 1}";
sheet[$"C{row}"].Value = (i + 1) * 1.25m;
}
workbook.SaveAs("Generated.xlsx");
sw.Stop();
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
ImportsSystemImportsSystem.DiagnosticsImportsIronXLModuleProgram Sub Main()License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY") Dim sw AsStopwatch = Stopwatch.StartNew() Dim workbook AsWorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet AsWorkSheet = workbook.CreateWorkSheet("Data") sheet("A1").Value = "Id" sheet("B1").Value = "Name" sheet("C1").Value = "Amount" For i AsInteger = 0 To 9999 Dim row AsInteger = i + 2 sheet($"A{row}").Value = i + 1 sheet($"B{row}").Value = $"Item {i + 1}" sheet($"C{row}").Value = (i + 1) * 1.25D Next workbook.SaveAs("Generated.xlsx") sw.Stop()Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms") End SubEndModule
Imports System
Imports System.Diagnostics
Imports IronXL
Module Program
Sub Main()
License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY")
Dim sw As Stopwatch = Stopwatch.StartNew()
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
sheet("A1").Value = "Id"
sheet("B1").Value = "Name"
sheet("C1").Value = "Amount"
For i As Integer = 0 To 9999
Dim row As Integer = i + 2
sheet($"A{row}").Value = i + 1
sheet($"B{row}").Value = $"Item {i + 1}"
sheet($"C{row}").Value = (i + 1) * 1.25D
Next
workbook.SaveAs("Generated.xlsx")
sw.Stop()
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms")
End Sub
End Module
Ejecute esto bajo dotnet run -c Release e intercambie sus propios conteos de filas, conteos de columnas o estilizaciones para ver cómo cambian los números con la complejidad del libro de trabajo.
IronXL.Excel genera libros de trabajo de Excel en XLSX, XLS, CSV, y JSON sin depender de Microsoft Office o Interop. La receta que sigo en cada proyecto es la misma: crear el libro de trabajo, agregar una hoja de trabajo, escribir valores y fórmulas, establecer cadenas de formato donde importa la visualización, y guardar una vez al final.
¿Cómo puedo crear archivos de Excel en C# sin usar Interop?
Puedes crear archivos de Excel sin Interop usando IronXL, que proporciona una API sencilla: WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX). Este enfoque funciona en cualquier plataforma .NET sin requerir la instalación de Microsoft Office.
¿Qué plataformas son compatibles con la creación de archivos de Excel con C#?
IronXL es compatible con la creación de archivos Excel en .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, funcionando en entornos de Windows, macOS, Linux, Docker, Azure y AWS.
¿Cómo instalo una biblioteca C# para la generación de Excel?
Instala IronXL a través del Administrador de Paquetes NuGet en Visual Studio, usa el comando PM> Install-Package IronXL.Excel, o descárgalo directamente desde nuget.org.
¿Cómo creo un nuevo libro de Excel programáticamente?
Crea un libro usando IronXL con WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX), luego añade hojas de trabajo usando workbook.CreateWorkSheet("SheetName").
¿Cómo puedo establecer valores de celdas en una hoja de Excel usando C#?
Establece valores de celdas en IronXL usando una sintaxis intuitiva: worksheet["A1"].Value = "Hello World" o establece rangos: worksheet["A1:A10"].Value = 100.
¿Puedo aplicar formato a las celdas de Excel programáticamente?
Sí, IronXL admite un formato integral que incluye colores de fondo (cell.Style.SetBackgroundColor("#FF0000")), bordes, fuentes y formatos de números.
¿Cómo uso fórmulas de Excel en C#?
Aplica fórmulas usando la propiedad Formula de IronXL: worksheet["A1"].Formula = "=SUM(B1:B10)", o usa métodos integrados como range.Sum(), range.Avg().
¿Cómo puedo proteger una hoja de Excel con una contraseña?
Protege hojas en IronXL usando worksheet.ProtectSheet("YourPassword") para prevenir modificaciones no autorizadas.
¿Cómo configuro las configuraciones de impresión para archivos de Excel?
Establece propiedades de impresión usando PrintSetup de IronXL: worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape y worksheet.SetPrintArea("A1:Z100").
¿Cómo guardo un libro de Excel en diferentes formatos?
Guarda libros usando el método SaveAs de IronXL: workbook.SaveAs("file.xlsx") para XLSX, o utiliza SaveAsCsv(), SaveAsJson() para otros formatos.
¿Cómo lleno una hoja de Excel con datos de una base de datos?
Utiliza IronXL para llenar hojas de trabajo obteniendo datos de una base de datos y estableciéndolos en celdas mediante métodos como worksheet["A1"].Value = dataFromDatabase.
¿Cómo puedo implementar paneles congelados en una hoja de Excel usando C#?
Congela paneles en hojas de trabajo usando IronXL con worksheet.FreezePanes(1, 1) para bloquear la fila superior y la columna más a la izquierda para una navegación más fácil.
Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.