Saltar al pie de página
USANDO IRONXL

Cree una API de Excel for .NET Core: cree, lea y exporte archivos XLSX

Desarrollar una API de Excel for .NET Core es sencillo con IronXL . Instale el paquete, cree un WorkBook, complete las celdas y devuelva la secuencia directamente (no se requiere Microsoft Office).

Install-Package IronXl.Excel

IronXL gestiona la creación de XLSX, la importación de datos, las exportaciones multiformato y el estilo de celdas completamente en código .NET administrado. Funciona en Windows, Linux y macOS, lo que lo convierte en una opción práctica para cualquier API de ASP.NET Core que necesite compatibilidad programática con Excel.

¿Cómo instalar IronXL en un proyecto .NET Core ?

Agregue IronXL a cualquier proyecto .NET 10 a través de la consola del Administrador de paquetes NuGet :

Install-Package IronXl.Excel

O instálelo a través de la interfaz de usuario NuGet de Visual Studio buscando IronXL . El nombre del paquete en NuGet es IronXl.Excel .

Después de la instalación, agregue using IronXL; a cualquier archivo que cree o lea libros de trabajo. No se requieren bibliotecas de interoperabilidad de Office, ni registro COM, ni instalación de Microsoft Excel en la máquina host: IronXL es completamente autónomo.

IronXL apunta a .NET Standard 2.0 y superiores, lo que significa que la misma biblioteca funciona para proyectos .NET Core, .NET 5/6/7/8/9/10 y .NET Framework . La documentación de IronXL cubre todos los entornos compatibles en detalle.

¿Cómo crear archivos de Excel mediante programación en .NET Core?

Crear documentos de Excel desde cero requiere solo unas pocas líneas de código con la API intuitiva de IronXL. La biblioteca proporciona control total sobre libros de trabajo, hojas de trabajo, estilos de celda y fórmulas a través de un modelo de objetos limpio.

Aquí se muestra una acción de controlador que crea un nuevo libro de Excel con datos formateados, demuestra la administración de hojas de cálculo y aplica estilos de celda:

using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
$vbLabelText   $csharpLabel

Archivo de Excel de salida

Cree una API de Excel for .NET Core: cree, lea y exporte archivos XLSX: Imagen 1: archivo de Excel generado por la API de .NET Core

WorkBook.Create() admite formatos XLSX y XLS. El método CreateWorkSheet() agrega una hoja con nombre donde se rellenan celdas con valores, se aplican fórmulas de Excel para cálculos y se controla el diseño a través de rangos de celdas. El motor de cálculo de IronXL evalúa las fórmulas automáticamente cuando cambian los datos del libro de trabajo, incluido el soporte para fórmulas de matriz utilizadas en escenarios de análisis de datos más complejos.

Los estilos de celda van mucho más allá del negrita y el color. La API de formato de celda le permite establecer formatos de números, bordes, alineación, tamaños de fuente y más, todo sin tocar la capa COM. Esto hace que sea seguro ejecutarlo dentro de entornos Linux en contenedores donde no existe ningún contexto de visualización.

¿Cómo agregar varias hojas de trabajo a un libro?

Un solo libro de trabajo puede contener cualquier cantidad de hojas de trabajo. Llama al workbook.CreateWorkSheet("SheetName") para cada pestaña necesaria. Se puede acceder a las hojas de trabajo más tarde por nombre a través de workbook.GetWorkSheet("SheetName") o por índice a través de workbook.WorkSheets[0].

Este patrón es útil cuando se generan informes de resumen más detalles: una hoja contiene totales agregados mientras que las hojas secundarias contienen las filas de transacciones sin procesar. Los documentos de administración de hojas de trabajo explican cómo cambiar el nombre, reordenar y eliminar hojas en tiempo de ejecución.

¿Cuál es la mejor manera de leer datos de Excel en las API web?

Importar datos de archivos Excel cargados por el usuario es esencial para cualquier aplicación web que procese contenido de hojas de cálculo. IronXL hace que la lectura de hojas de cálculo de Excel sea directa: cárguelas desde una secuencia, repita filas y extraiga valores escritos de cada celda.

[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
$vbLabelText   $csharpLabel

Resultado

Cree una API de Excel for .NET Core: cree, lea y exporte archivos XLSX: Imagen 2: salida que muestra los datos de Excel importados correctamente

WorkBook.Load() abre archivos de Excel desde secuencias, rutas de archivos o matrices de bytes. Se accede a las celdas a través de la sintaxis del indexador worksheet["A1"] o iterando un rango de celdas con nombre. IronXL maneja la validación de datos automáticamente y expone accesores de tipo seguro -- IntValue, DecimalValue, DateTimeValue, StringValue -- de modo que el código consumido se mantiene limpio y predecible.

¿Cómo filtrar y ordenar los datos importados?

Después de cargar un libro de trabajo, llame a .SortAscending() o .SortDescending() en cualquier objeto Range para ordenar filas. Para filtrar, itere celdas y evalúe condiciones en línea o transfiera datos a una colección LINQ para su posterior procesamiento. La guía de clasificación y filtrado demuestra ambos enfoques con ejemplos prácticos.

¿Trabajando con cargas de gran tamaño? IronXL solo lee las celdas a las que accede, por lo que no es necesario cargar un archivo completo de varios megabytes en la memoria antes de consultar una columna específica. Este enfoque de acceso diferido mantiene estable el consumo de memoria incluso cuando se procesan libros con decenas de miles de filas.

¿Cómo puedes exportar datos de Excel a diferentes formatos?

Las aplicaciones a menudo necesitan ofrecer hojas de cálculo en múltiples formatos de salida. IronXL admite la exportación a XLSX, XLS, CSV, JSON y HTML en una sola llamada de método, sin necesidad de herramientas de conversión externas.

[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
$vbLabelText   $csharpLabel

El uso de plantillas de Excel con diseños predefinidos acelera la generación de informes. Cargue un libro de trabajo prediseñado, complete con datos dinámicos celdas o rangos con nombre y luego transmita el resultado. Este enfoque es adecuado para informes de ventas, facturas y documentos de cumplimiento donde el formato consistente es más importante que la flexibilidad.

La compatibilidad multiplataforma de IronXL significa que estas operaciones de archivos funcionan de manera idéntica en Windows, Linux y macOS, lo que lo hace adecuado para implementaciones en contenedores de .NET Core . Lea más en la guía multiplataforma de IronXL .

¿Cómo exportar a CSV desde una API de .NET Core ?

Llama a workbook.ToStream(FileFormat.CSV) y devuélvelo con el tipo de contenido text/csv, como se muestra arriba. Para libros de trabajo de varias hojas, cada hoja se puede exportar de forma independiente accediendo a workbook.WorkSheets[index] y llamando a .ToStream(FileFormat.CSV) en el objeto de hoja. La documentación de exportación CSV cubre el manejo de delimitadores, codificación y opciones de formato de fecha.

¿Cómo se aplican el formato condicional y las barras de datos?

Más allá de los estilos de celda básicos, IronXL admite reglas de formato condicional: resalta las celdas que superan un umbral en verde, marca los negativos en rojo o aplica barras de datos de degradado para que las tendencias sean visibles inmediatamente en la hoja de cálculo sin ningún procesamiento posterior en una herramienta separada.

El formato condicional es particularmente valioso en los paneles financieros y en los informes de KPI donde los lectores necesitan detectar valores atípicos de un vistazo. En lugar de depender de que el destinatario aplique su propio formato después de la descarga, las reglas viajan integradas en el archivo XLSX y se evalúan automáticamente cuando el archivo se abre en cualquier versión de Microsoft Excel o visor compatible.

El formato condicional se establece a través de la propiedad ConditionalFormatting de la hoja de cálculo. Las reglas se aplican a un rango de celdas con nombre y admiten múltiples tipos de condiciones: comparaciones de valores de celda, reglas basadas en fórmulas, escalas de color que califican los valores de menor a mayor y superposiciones de barras de datos que funcionan como gráficos de barras en la celda. La especificación Open XML define la estructura de reglas subyacente que IronXL escribe en el archivo XLSX.

Para obtener una referencia completa sobre la aplicación de escalas de color, conjuntos de iconos y barras de datos, consulte el tutorial de formato condicional en la documentación de IronXL .

¿Cómo proteger archivos y hojas de cálculo de Excel?

La distribución de informes que contienen datos confidenciales requiere una capa de control de acceso. IronXL admite protección con contraseña tanto a nivel de libro como a nivel de hoja de trabajo:

Contraseña del libro : Establezca workbook.Password = "secret" antes de llamar a .SaveAs() para cifrar el archivo XLSX. Los destinatarios deben introducir la contraseña para abrirlo en Excel.

  • Protección de la hoja de trabajo : llame a worksheet.ProtectSheet("password") para bloquear la edición de la celda y al mismo tiempo permitir que se visualice la hoja. Se pueden desbloquear rangos específicos para el ingreso de datos usando la API AllowEditRange.
  • Distribución de solo lectura : para documentos que nunca deben editarse, combine la protección de la hoja de cálculo con el cifrado a nivel de archivo.

Los archivos XLSX protegidos con contraseña utilizan encriptación AES-128 de manera predeterminada, el mismo estándar que aplica Excel nativo. Esto significa que un archivo protegido a través de IronXL es totalmente compatible con el aviso de apertura de archivos integrado de Excel: no se requiere un visor especial por parte del destinatario.

Estas características de seguridad complementan el modelo de seguridad estándar de .NET Core y son especialmente útiles al crear puntos finales de informes financieros o de RR.HH. La documentación de protección de archivos proporciona la referencia completa de la API.

¿Cómo trabajar con fórmulas de Excel en .NET?

El motor de cálculo integrado de IronXL evalúa fórmulas estándar de Excel en tiempo de ejecución, por lo que la API puede devolver valores calculados sin tener que guardar en disco ni volver a abrir en Excel. Asigne una cadena de fórmula a la propiedad .Formula de cualquier celda:

// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
$vbLabelText   $csharpLabel

IronXL admite la mayoría de las funciones estándar de Excel, incluidas las categorías matemáticas, estadísticas, de texto, de fecha y de búsqueda. Las fórmulas de matriz (semántica (Ctrl+Shift+Enter) también son compatibles con escenarios avanzados. Debido a que la evaluación de la fórmula ocurre dentro del proceso .NET , no hay un viaje de ida y vuelta a un servicio de cálculo externo: los resultados están disponibles inmediatamente después de que se asigna la fórmula, lo que mantiene los tiempos de respuesta de la API predecibles incluso cuando se calcula en miles de filas. La referencia de soporte de fórmulas enumera todas las funciones admitidas.

¿Cuales son tus próximos pasos?

La creación de una API de Excel con IronXL proporciona a las aplicaciones .NET Core capacidades sólidas para trabajar con hojas de cálculo. Desde la creación de archivos XLSX con datos formateados y fórmulas calculadas hasta la importación de cargas de usuarios y la exportación de datos en múltiples formatos, IronXL maneja cada aspecto de la manipulación programática de hojas de cálculo de manera multiplataforma y sin necesidad de Office.

Explora estos recursos para ir más allá:

Comience una prueba gratuita para probar IronXL en un proyecto en vivo o revise las opciones de licencia para encontrar el plan adecuado para la implementación de producción.

Preguntas Frecuentes

¿Qué es IronXL?

IronXL es una biblioteca de Excel .NET que permite a los desarrolladores crear, leer y exportar archivos de Excel mediante programación en C# sin necesidad de Microsoft Office o interoperabilidad COM.

¿Cómo crear un archivo Excel en .NET Core sin Office?

Llame a WorkBook.Create(ExcelFileFormat.XLSX) para crear un nuevo libro de trabajo, agregar hojas con CreateWorkSheet(), completar celdas con la sintaxis worksheet['A1'].Value y transmitir el resultado con workbook.ToStream().

¿Cómo leer un archivo Excel cargado en ASP.NET Core?

Pase la secuencia IFormFile a WorkBook.Load(stream), acceda a DefaultWorkSheet e itere filas con worksheet.RowCount. Los accesores tipados, como DecimalValue y DateTimeValue, extraen datos fuertemente tipados de cada celda.

¿Puede IronXL exportar datos de Excel a CSV o JSON?

Sí. Llame a workbook.ToStream(FileFormat.CSV) para obtener una salida CSV o a workbook.ToJson() para obtener una representación JSON de los datos del libro de trabajo.

¿ IronXL funciona en Linux y macOS?

Sí. IronXL apunta a .NET Standard 2.0 y superiores y se ejecuta en Windows, Linux y macOS sin ninguna instalación de Microsoft Office o capa COM.

¿Cómo proteger con contraseña un archivo de Excel con IronXL?

Establezca workbook.Password como una cadena antes de llamar a SaveAs(). Para proteger la hoja de cálculo, llame a worksheet.ProtectSheet('password') para evitar la edición de celdas y permitir la lectura de la hoja.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me