IRONSOFTWAREHOME
USANDO IRONXL

Exportar un conjunto de datos a Excel en C# con IronXL | Sin necesidad de Office

Curtis Chau
Curtis Chau
Updated: 28 de junio de 2026

Exportar un DataSet o una DataTable a Excel en C# te ofrece una forma fiable de convertir datos estructurados en memoria en archivos de hoja de cálculo profesionales, sin depender de que Microsoft Office esté instalado en el equipo de destino. Tanto si extraes registros de una base de datos SQL, como si creas un DataSet mediante programación o trabajas con un DataGrid existente, IronXL gestiona todo el proceso a través de una API limpia y centrada en el código. Esta guía recorre todos los escenarios principales —desde la exportación de una sola tabla hasta libros de trabajo de varias hojas y resultados de consultas a bases de datos en tiempo real— utilizando sentencias de C# de primer nivel y .NET 10.

Instala IronXL una vez, escribe unas pocas líneas de código y tus datos estarán en un archivo XLSX sin depender en absoluto de Office. Las secciones siguientes tratan sobre la instalación, los patrones básicos, el formato avanzado y la integración con bases de datos de una forma que te permita copiar y pegar directamente en tus propios proyectos.

¿Cómo se instala IronXL para la exportación a Excel?

Antes de escribir cualquier código de exportación, añade IronXL a tu proyecto a través del Gestor de paquetes NuGet. Abre un terminal en la raíz de tu proyecto y ejecuta el comando .NET CLI, o utiliza la Consola del Administrador de Paquetes en Visual Studio con el comando Install-Package:

dotnet add package IronXL.Excel

O en la Consola del Administrador de Paquetes de Visual Studio:

PM > Install-Package IronXL.Excel

Tras la instalación, añada una instrucción "using" de nivel superior para importar el espacio de nombres IronXL:

using IronXL;
using System.Data;

IronXL está destinado a .NET 8, .NET 9 y .NET 10, así como a versiones anteriores de .NET Framework (4.6.2+). No es necesaria la instalación de Office en ningún equipo: servidor, ordenador de sobremesa o nube. Una vez instalado el paquete, podrá crear, leer y escribir archivos XLSX, XLS y CSV íntegramente en código gestionado.

Para conocer las opciones de instalación detalladas, consulte la guía de instalación de IronXL y la página del paquete NuGet para ver el historial de versiones.

¿Cómo se exporta una sola tabla de datos a un archivo de Excel?

El escenario más habitual es exportar una tabla de datos (DataTable) a una sola hoja de cálculo. Las clases WorkBook y WorkSheet de IronXL se asignan naturalmente al modelo de objetos de Excel. Se crea un libro, se añade una hoja de cálculo y, a continuación, se recorren las columnas y filas de la tabla de datos.

El siguiente ejemplo crea un DataTable de Empleados en memoria y lo escribe en EmployeeData.xlsx:

using IronXL;
using System.Data;

// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));

dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");

// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows starting at row 1
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workbook.SaveAs("EmployeeData.xlsx");

Resultado

Cómo Exportar Dataset a Excel VB .NET: Una Guía Completa con IronXL: Imagen 1 - Salida al exportar un DataTable simple a Excel en VB.NET

SetCellValue acepta int, double, string y bool -- así obtienes tipos nativos de celdas de Excel sin necesidad de conversiones extra. El patrón de bucle funciona para tablas de cualquier tamaño porque IronXL escribe directamente en memoria y descarga al disco solo cuando se llama a SaveAs, manteniendo el proceso eficiente incluso para miles de filas.

Para obtener una visión más amplia de las técnicas de lectura y escritura, el tutorial de IronXL C# cubre toda la gama de operaciones con archivos junto con este patrón de exportación.

¿Cómo se exporta un conjunto de datos a varias hojas de cálculo de Excel?

Cuando un DataSet contiene varias tablas relacionadas —como Productos y Pedidos—, puede asignar cada DataTable a su propia hoja de cálculo dentro de un mismo libro. Esto permite a los destinatarios ver todos los datos relacionados en un único archivo sin necesidad de abrir varios documentos.

El bucle a continuación itera ds.Tables y crea una hoja por tabla:

using IronXL;
using System.Data;

// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");

DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);

DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);

// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

foreach (DataTable table in ds.Tables)
{
    WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);

    // Write headers
    for (int col = 0; col < table.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
    }

    // Write rows
    for (int row = 0; row < table.Rows.Count; row++)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
        }
    }
}

workbook.SaveAs("CompanyReport.xlsx");

Resultado

Cómo Exportar Dataset a Excel VB .NET: Una Guía Completa con IronXL: Imagen 2 - Archivo Excel generado con el DataSet exportado como hojas de trabajo separadas

Cada hoja de cálculo lleva el nombre de la tabla de datos de origen, lo que facilita la navegación dentro de Excel. Debido a que WorkBook.Create asigna el libro de trabajo en memoria, puedes seguir agregando hojas de trabajo en el bucle sin reabrir el archivo -- IronXL construye toda la estructura XLSX antes de escribir en el disco.

La documentación de IronXL WorkBook enumera todos los métodos disponibles en el objeto WorkBook, incluyendo la reordenación de hojas, la protección con contraseña y el guardado en formatos distintos de XLSX.

¿Cómo se añade formato de encabezado a las exportaciones de Excel?

Las exportaciones de datos sin formato son funcionales, pero añadir encabezados en negrita y anchos de columna hace que el resultado sea inmediatamente utilizable en un contexto empresarial. IronXL expone el estilo de celda y rango a través del objeto Style adjunto a cualquier rango WorkSheet.

El fragmento de código siguiente aplica formato de negrita a la fila de encabezado y ajusta automáticamente el tamaño de las columnas tras escribir los datos:

using IronXL;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));

dt.Rows.Add("North", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East",  87000m, 93000m,  99000m,  108000m);
dt.Rows.Add("West",  145000m, 152000m, 161000m, 174000m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    sheet["A1:E1"].Style.Font.Bold = true;
    sheet["A1:E1"].Style.Font.Height = 12;
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
    }
}

workbook.SaveAs("SalesReport.xlsx");

La propiedad Style.Font.Bold se aplica a todo el rango del encabezado en una sola declaración. IronXL también admite colores de fondo (Style.BackgroundColor), estilos de borde (Style.Border), formatos de número (Style.NumberFormat.FormatCode) y alineación horizontal (Style.HorizontalAlignment). Para consultar la referencia de estilo completa, véase la guía de formato de celdas de IronXL.

¿Cómo se exportan los resultados de una consulta de base de datos a Excel?

La conexión a una base de datos SQL y la exportación de los resultados directamente a Excel cubre un caso de uso real muy importante: informes programados, instantáneas de datos y exportaciones administrativas. El enfoque llena un DataSet usando SqlDataAdapter, luego asigna el DataTable resultante a una hoja de trabajo de IronXL.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";

// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
    adapter.Fill(ds, "Customers");
}

DataTable dt = ds.Tables["Customers"]!;

// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");

// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;

// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object cellValue = dt.Rows[row][col];
        worksheet.SetCellValue(row + 1, col,
            cellValue == DBNull.Value ? "" : cellValue.ToString()!);
    }
}

workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");

Puntos clave para las exportaciones de bases de datos

El operador de comprobación de valores nulos (cellValue == DBNull.Value ? "" : cellValue.ToString()) prevents exceptions when the database returns valores NULL` -- una ocurrencia común con columnas opcionales. El formato en negrita de la fila de encabezado permite a los destinatarios del informe distinguir inmediatamente los encabezados de los datos.

Para más patrones sobre cómo leer datos de vuelta desde Excel a objetos C#, el tutorial de exportación de DataTable de IronXL muestra cómo revertir este flujo de trabajo.

¿Cómo se compara IronXL con otros métodos de exportación de Excel?

Antes de elegir una biblioteca, resulta útil comprender cómo se comparan las principales opciones entre sí en las áreas más relevantes para los escenarios de exportación de DataSet.

Comparación de bibliotecas de exportación a Excel para escenarios de .NET DataSet
AcercarseSe requiere oficinaCompatibilidad con XLSXAPI de estiloVarias hojasRendimiento (grandes volúmenes de datos)
IronXLNoLlenoAlto
Interop de Microsoft OfficeLlenoBajo
EPPlusNoParcialAlto
ClosedXMLNoParcialMedio
CSV (manual)NoNoNoneNoMuy alta

Interop de Microsoft Office solo funciona en equipos Windows con Office instalado, lo que lo descarta para implementaciones en servidor y funciones en la nube. IronXL, EPPlus y ClosedXML admiten la generación del lado del servidor; el factor diferenciador clave es la amplitud de la API de estilo y el modelo de licencia. La licencia de IronXL incluye el uso comercial y cubre todos los marcos de trabajo .NET de destino desde un único paquete.

En cuanto a comparativas y pruebas de rendimiento de terceros, la documentación de Microsoft sobre formatos de archivo de Excel y la página del proyecto EPPlus proporcionan contexto adicional para tomar la decisión adecuada para su proyecto.

¿Cómo se gestionan grandes conjuntos de datos sin problemas de memoria?

Al exportar DataTables con decenas de miles de filas, es importante que el uso de memoria sea predecible. El patrón a continuación transmite datos desde un IDataReader en lugar de cargar primero el conjunto de resultados completo en un DataTable. Esto evita el costo de memoria doble de mantener tanto el búfer del lector como el DataTable simultáneamente.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");

using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();

// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
    sheet.SetCellValue(0, col, reader.GetName(col));
}

// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
    for (int col = 0; col < reader.FieldCount; col++)
    {
        sheet.SetCellValue(excelRow, col,
            reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
    }
    excelRow++;
}

workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");

Se recomienda este patrón cuando el conjunto de resultados puede superar las 50 000 filas o cuando se ejecuta dentro de un servicio con limitaciones de memoria. La documentación sobre el rendimiento de IronXL incluye opciones adicionales de ajuste de memoria y rendimiento para exportaciones de gran volumen.

Guardado por lotes en CSV para exportaciones de gran volumen

Para exportaciones que superen las 500 000 filas, en las que la memoria sea extremadamente limitada, considere dividir la salida en varios libros de trabajo o exportar al formato CSV en su lugar:

using IronXL;

// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");

El formato CSV pierde el formato y la compatibilidad con hojas múltiples, pero sigue siendo válido para procesos ETL posteriores que consumen datos sin procesar delimitados.

¿Cómo se guardan archivos de Excel en diferentes formatos y ubicaciones?

IronXL admite guardar en la ruta del archivo, MemoryStream y byte[] -- lo cual es relevante para aplicaciones ASP.NET que devuelven Excel como respuesta de descarga.

using IronXL;
using System.IO;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");

// Save to file path
workbook.SaveAs("Report.xlsx");

// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");

// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action

Para ASP.NET Core, devuelve File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx") desde tu acción del controlador para activar una descarga de navegador. La guía de IronXL ASP.NET Excel muestra el patrón completo de integración del controlador.

En cuanto a bibliotecas alternativas de .NET para Excel, el Open XML SDK es la base de código abierto sobre la que se construyen muchas bibliotecas.

Formatos de salida compatibles

IronXL guarda en los siguientes formatos sin ninguna dependencia adicional:

  • XLSX -- Formato OpenXML, compatible con Excel 2007 y versiones posteriores
  • XLS -- Formato binario heredado, compatible con Excel 97-2003
  • CSV: valores separados por comas, compatible universalmente
  • TSV -- Valores separados por tabulaciones
  • JSON -- Exportación de datos estructurados

Cambia formatos cambiando la extensión del archivo en la ruta SaveAs o utilizando el método sobrecargado que acepta un valor enum ExcelFileFormat.

¿Cómo se verifica que el archivo Excel exportado es correcto?

Tras la exportación, puede volver a leer el archivo con IronXL para verificar el recuento de filas, comprobar valores aleatoriamente o ejecutar verificaciones automatizadas en un proyecto de prueba:

using IronXL;

WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];

// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");

// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;

Console.WriteLine($"Header: {header}, First row: {firstEmployee}");

Este patrón de verificación resulta especialmente útil en suites de pruebas de integración en las que es necesario confirmar la corrección de la exportación antes de enviar archivos a sistemas externos. El tutorial de lectura de IronXL muestra toda la gama de operaciones de lectura disponibles después de cargar un archivo.

Para más información sobre los patrones DataSet y DataTable en .NET, la documentación de Microsoft DataSet trata en profundidad el modelo de objetos ADO.NET.

¿Cuales son tus próximos pasos?

Ahora dispone de patrones de trabajo para todos los principales escenarios de exportación de DataSet a Excel en C#: desde una sola DataTable hasta libros de trabajo con varias hojas, exportaciones basadas en bases de datos, encabezados formateados y streaming de grandes volúmenes de datos. A continuación te indicamos cómo dar el siguiente paso en función de tu objetivo:

  • Prueba IronXL gratis: empieza con una Licencia de prueba gratuita y ejecuta los ejemplos anteriores con tus propios datos antes de dar el paso a la producción.
  • Lea la referencia completa de la API: la referencia de objetos de IronXL cubre todos los métodos de WorkBook, WorkSheet y rangos de celdas.
  • Explora tutoriales de exportación relacionados -- La guía de C# DataTable a Excel cubre el flujo de trabajo inverso -- leer Excel de nuevo en objetos DataTable.
  • Revisar las opciones de formato: la documentación sobre el formato de celdas de IronXL muestra formatos numéricos, bordes, colores de fondo y opciones de alineación.
  • Comprueba las licencias: para implementaciones en producción, consulta la página de licencias de IronXL para elegir entre las opciones Developer, Organization y Libre de regalías.
  • Compárelo con otras herramientas de Iron Software: si su proyecto también requiere la generación de PDF o OCR, la suite de productos de Iron Software le permite combinar varias bibliotecas a un precio reducido.

Partiendo de los patrones aquí descritos, puedes incorporar la automatización de tareas programadas, los puntos finales de descarga de .NET Core y los flujos de salida multiformato íntegramente en C# gestionado: sin Office, sin COM y sin dependencias de tiempo de ejecución más allá del paquete NuGet.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta