Saltar al pie de página
USANDO IRONXL

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

Crear una API de Excel para .NET Core orientada al cumplimiento del SII (Suministro Inmediato de Información) de la AEAT es muy sencillo con IronXL. En los entornos de producción españoles, el principal obstáculo para automatizar la generación de ficheros SII, los modelos 303/347/390 y los datos VeriFactu es la dependencia de Microsoft.Office.Interop: esa biblioteca no funciona en Linux ni en contenedores Docker, precisamente el entorno donde se ejecutan la mayoría de los microservicios de AEAT hoy en día. IronXL es la alternativa: instale el paquete, cree un WorkBook, rellene las celdas y devuelva el flujo directamente, sin necesidad de Microsoft Office.

Install-Package IronXL.Excel

IronXL gestiona la creación de archivos XLSX, la importación de datos, las exportaciones en múltiples formatos y el estilo de las celdas íntegramente en código .NET gestionado. Funciona en Windows, Linux y macOS, lo que la convierte en la opción práctica para cualquier API de .NET Core que necesite generar ficheros Excel para la sede electrónica de la AEAT, sin licencias Office en los servidores de producción.

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

Añade IronXL a cualquier proyecto .NET 10 a través de la consola del gestor de paquetes NuGet:

Install-Package IronXL.Excel

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

Tras la instalación, añada 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 el equipo host: IronXL es totalmente autónomo. Esta autonomía es decisiva para los equipos de cumplimiento fiscal que despliegan APIs de generación de ficheros SII en contenedores Linux de Azure o AWS, donde instalar una licencia Office en cada pod es inviable.

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

¿Cómo crear ficheros XLSX para declaraciones AEAT mediante programación en .NET Core?

Crear el fichero XLSX del modelo 303 (declaración trimestral de IVA) o el listado del modelo 347 (operaciones con terceros superiores a 3.005,06 €) desde cero requiere solo unas pocas líneas de código con la intuitiva API de IronXL. La biblioteca ofrece un control total sobre libros, hojas, estilos de celda y fórmulas a través de un modelo de objetos limpio que funciona en Linux sin Office.

A continuación se muestra una acción de controlador que crea un nuevo libro de Excel con datos de ventas formateados —un patrón directamente aplicable a los campos del modelo 303 (base imponible, cuota IVA) o a los registros SII de facturas emitidas:

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");
    }
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/[controller]")>
Public Class ExcelController
    Inherits ControllerBase

    <HttpGet("create-report")>
    Public Function CreateSalesReport() As IActionResult
        ' Create a new Excel workbook in XLSX format
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As 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
        Dim stream = workbook.ToStream()
        Return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx")
    End Function
End Class
$vbLabelText   $csharpLabel

Archivo de Excel de salida

Construir una API de Excel para .NET Core: Crear, leer y exportar archivos XLSX: Imagen 1 - Archivo Excel generado por la API .NET Core

WorkBook.Create() admite los formatos XLSX y XLS. El método CreateWorkSheet() añade una hoja con nombre en la que se rellenan las celdas con valores, se aplican fórmulas de Excel para los cálculos y se controla el diseño mediante 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, incluyendo compatibilidad con 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 celdas permite configurar formatos de números, bordes, alineación, tamaños de fuente y mucho más, todo ello sin necesidad de modificar la capa COM. Esto permite ejecutar la API de forma segura en entornos Linux en contenedores donde no existe un contexto de visualización —el escenario estándar para microservicios de generación de ficheros SII AEAT.

¿Cómo se añaden varias hojas de cálculo para distintos modelos AEAT?

Un solo libro puede contener cualquier número de hojas. En el contexto AEAT, este patrón es especialmente útil: una hoja contiene los datos del modelo 303 (cuotas IVA repercutidas y soportadas), otra los registros del modelo 347 (operaciones con terceros), y una tercera el resumen del modelo 390 (resumen anual IVA). Las entidades supervisadas por el Banco de España / CNMV también organizan sus informes regulatorios XLSX con pestañas separadas por categoría.

Llame al workbook.CreateWorkSheet("SheetName") para cada ficha necesaria. Las hojas de trabajo son accesibles posteriormente por nombre a través de workbook.GetWorkSheet("SheetName") o por índice a través de workbook.WorkSheets[0]. La documentación sobre la gestión de hojas de cálculo explica cómo cambiar el nombre, reordenar y eliminar hojas durante la ejecución.

¿Cuál es la mejor manera de leer datos de Excel para APIs de cumplimiento SII?

La importación de datos desde archivos Excel subidos por los usuarios es esencial para cualquier API de cumplimiento fiscal que procese borradores de declaraciones o registros de facturación. IronXL facilita la lectura de hojas XLSX: carga desde un flujo, recorre las filas y extrae los valores de cada celda con tipos seguros. Este patrón es directamente aplicable a la validación de datos VeriFactu (Real Decreto-Ley 15/2025) antes de generar el XML de presentación.

[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
    });
}
Imports Microsoft.AspNetCore.Mvc
Imports System.Collections.Generic
Imports IronXL

<HttpPost("import")>
Public Function ImportExcelData(file As IFormFile) As IActionResult
    If file Is Nothing OrElse file.Length = 0 Then
        Return BadRequest("No file uploaded")
    End If

    Using stream = file.OpenReadStream()
        ' Load the workbook directly from the upload stream
        Dim workbook As WorkBook = WorkBook.Load(stream)
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

        Dim records As New List(Of Dictionary(Of String, Object))()

        ' Start at row 2 to skip the header row
        For row As Integer = 2 To worksheet.RowCount
            Dim record As New Dictionary(Of String, Object) From {
                {"Product", worksheet($"A{row}").StringValue},
                {"Sales", worksheet($"B{row}").DecimalValue},
                {"Date", worksheet($"C{row}").DateTimeValue}
            }
            records.Add(record)
        Next

        Return Ok(New With {
            .message = "Import successful",
            .recordCount = records.Count,
            .data = records
        })
    End Using
End Function
$vbLabelText   $csharpLabel

Resultado

Construir una API de Excel para .NET Core: Crear, leer y exportar archivos XLSX: Imagen 2 - Salida mostrando los datos de Excel importados correctamente

WorkBook.Load() abre archivos Excel a partir de secuencias, rutas de archivo 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 de forma automática y expone accesores de tipo seguro —IntValue, DecimalValue, DateTimeValue, StringValue— para que el código de consumo se mantenga limpio y predecible.

¿Cómo se filtran y ordenan los datos de declaraciones importados?

Después de cargar un libro de trabajo, llame .SortAscending() o .SortDescending() en cualquier objeto Range para ordenar las filas. Para filtrar —por ejemplo, seleccionar únicamente las operaciones del modelo 347 superiores a 3.005,06 €—, itere por las celdas y evalúe las condiciones en línea o transfiera los datos a una colección LINQ. La guía de clasificación y filtrado muestra ambos enfoques con ejemplos prácticos.

¿Trabajas con ficheros de gran tamaño? IronXL solo lee las celdas a las que se accede, por lo que no es necesario cargar un fichero 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 en los servidores de producción de AEAT.

¿Cómo exportar datos de declaraciones AEAT a diferentes formatos desde una API .NET Core?

Las APIs de cumplimiento fiscal suelen necesitar ofrecer hojas de cálculo en múltiples formatos: XLSX para la sede electrónica de la AEAT, CSV para pipelines de datos del SII, JSON para respuestas de API web. IronXL permite exportar a XLSX, XLS, CSV, JSON y HTML con una sola llamada de método, sin herramientas de conversión externas ni Office en el servidor.

[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")
    };
}
Imports Microsoft.AspNetCore.Mvc

<HttpGet("export/{format}")>
Public Function ExportData(format As String) As IActionResult
    ' Load a pre-designed template workbook
    Dim workbook As WorkBook = WorkBook.Load("template.xlsx")

    Select Case format.ToLower()
        Case "xlsx"
            Return File(workbook.ToStream(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "export.xlsx")
        Case "csv"
            Return File(workbook.ToStream(FileFormat.CSV), "text/csv", "export.csv")
        Case "json"
            Return Ok(workbook.ToJson())
        Case Else
            Return BadRequest("Unsupported format")
    End Select
End Function
$vbLabelText   $csharpLabel

El uso de plantillas de Excel con diseños predefinidos agiliza la generación de informes regulatorios. Cargue un libro prediseñado para el modelo 303, rellene los datos dinámicos de IVA (base imponible, cuota repercutida, cuota soportada) en celdas o rangos con nombre, y transmita el resultado. Este enfoque es adecuado para informes de ventas, facturas, documentos TicketBAI en el País Vasco (Bizkaia, Gipuzkoa, Araba) y cualquier documento de cumplimiento normativo donde la coherencia del formato prima sobre la flexibilidad.

La compatibilidad multiplataforma de IronXL significa que estas operaciones funcionan de forma idéntica en Windows, Linux y macOS, siendo adecuada para despliegues en contenedores Docker de .NET Core. Más información en la guía multiplataforma de IronXL.

¿Cómo se exporta a CSV desde una API SII de .NET Core?

Llame a workbook.ToStream(FileFormat.CSV) y devuélvalo con el tipo de contenido text/csv, como se muestra arriba. Para libros de varias hojas, cada hoja puede exportarse de forma independiente accediendo a workbook.WorkSheets[index] y llamando a .ToStream(FileFormat.CSV). La documentación sobre exportación a CSV abarca el manejo de delimitadores, la codificación y las opciones de formato de fecha —aspectos relevantes cuando los ficheros CSV de operaciones SII deben cumplir el encoding UTF-8 exigido por la AEAT.

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

Más allá de los estilos básicos, IronXL admite reglas de formato condicional: resaltar en verde las cuotas de IVA correctas, marcar en rojo los registros VeriFactu con errores de validación, o aplicar barras de datos con degradado para visualizar la distribución de bases imponibles. El formato condicional resulta especialmente valioso en los informes del modelo 347 o en los paneles de Banco de España / CNMV, donde los revisores necesitan detectar valores atípicos de un solo vistazo.

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 designado y admiten comparaciones de valores de celda, reglas basadas en fórmulas, escalas de color y barras de datos. La especificación Open XML define la estructura de reglas subyacente que IronXL escribe en el fichero XLSX.

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

¿Cómo se protegen los ficheros XLSX de declaraciones AEAT?

La distribución de informes con datos fiscales sensibles requiere control de acceso. En el contexto de la LOPDGDD, los ficheros XLSX que contienen datos personales (NIF de clientes, importes de operaciones) deben protegerse adecuadamente antes de su transmisión. IronXL admite protección con contraseña a nivel de libro y de hoja:

  • Contraseña del libro de trabajo: Establezca workbook.Password = "secret" antes de llamar a .SaveAs() para cifrar el fichero XLSX con AES-128. Los destinatarios deberán 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 celdas mientras se permite ver la hoja. Útil para distribuir el borrador del modelo 390 para revisión sin permitir modificaciones.
  • Distribución de solo lectura: Para documentos que nunca deben editarse —como los ficheros finales del modelo 303 para archivo—, combine la protección de hojas con el cifrado a nivel de archivo.

La documentación sobre protección de archivos proporciona la referencia completa de la API.

¿Cómo se trabaja con fórmulas de Excel en APIs de cálculo de IVA?

El motor de cálculo integrado de IronXL evalúa fórmulas estándar de Excel en tiempo de ejecución. En APIs de cumplimiento fiscal, esto permite calcular automáticamente las bases imponibles, las cuotas del modelo 303, o los totales por proveedor para el modelo 347, sin guardar en disco y volver a abrir en Excel primero.

// 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;
' 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
Dim total As Decimal = worksheet($"B{lastRow}").DecimalValue
$vbLabelText   $csharpLabel

IronXL es compatible con 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. Dado que la evaluación de fórmulas se realiza dentro del proceso de .NET, no hay ida y vuelta a un servicio de cálculo externo: los resultados están disponibles inmediatamente después de asignar la fórmula, lo que mantiene predecibles los tiempos de respuesta de la API incluso al realizar cálculos sobre miles de facturas del SII. La lista de referencia de compatibilidad de fórmulas incluye todas las funciones compatibles.

¿Cuales son tus próximos pasos?

Crear una API de Excel con IronXL como alternativa a Microsoft.Office.Interop en servidores Linux de AEAT proporciona a las aplicaciones de .NET Core sólidas capacidades para trabajar con ficheros XLSX de SII, modelos 303/347/390, TicketBAI y VeriFactu. Desde la creación de ficheros XLSX con datos fiscales formateados y fórmulas de cálculo de IVA hasta la importación de borradores de declaraciones subidos por los usuarios y la exportación en múltiples formatos, IronXL gestiona todos los aspectos de la manipulación programática de hojas de cálculo de forma multiplataforma y sin necesidad de Office.

Explora estos recursos para ir más allá:

Inicie una prueba gratuita para probar IronXL en un proyecto real, o consulte las opciones de licencia para encontrar el plan adecuado para la implementación en producción.

Preguntas Frecuentes

¿Por qué usar IronXL en lugar de Microsoft.Office.Interop para generar ficheros SII en servidores Linux?

Microsoft.Office.Interop requiere una instalación completa de Excel en cada servidor, no funciona en Linux ni en contenedores Docker, y Microsoft desaconseja su uso en entornos de servidor. IronXL no tiene ninguna dependencia de Office, se ejecuta en Linux/Docker y es adecuado para microservicios de generación de ficheros SII AEAT en producción.

¿Cómo crear ficheros XLSX para los modelos 303, 347 y 390 de la AEAT con IronXL en .NET Core?

Llame a WorkBook.Create(ExcelFileFormat.XLSX) para crear el libro, añada hojas con CreateWorkSheet() (una por modelo), rellene las celdas con bases imponibles y cuotas usando worksheet['A1'].Value, aplique fórmulas de cálculo y devuelva el resultado con workbook.ToStream().

¿IronXL funciona en Linux y Docker para APIs de cumplimiento SII AEAT?

Sí. IronXL apunta a .NET Standard 2.0+ y se ejecuta en Windows, Linux, macOS y Docker sin Microsoft Office ni capa COM. Es la opción idónea para microservicios de generación de ficheros SII desplegados en contenedores en Azure o AWS.

¿Cómo cumplir la LOPDGDD al proteger ficheros XLSX de declaraciones AEAT?

Establezca workbook.Password antes de SaveAs() para cifrar el XLSX con AES-128. Use worksheet.ProtectSheet('password') para impedir la edición de celdas. Combine ambas medidas en ficheros que contengan datos personales (NIF, importes) sujetos a minimización según la LOPDGDD.

¿Puede IronXL generar ficheros para TicketBAI y VeriFactu desde una API .NET Core?

Sí. IronXL genera los XLSX de datos de facturación necesarios para TicketBAI (Bizkaia, Gipuzkoa, Araba) y VeriFactu (Real Decreto-Ley 15/2025), ejecutándose sin Office en servidores Linux. Los datos se exportan a XLSX, CSV o JSON según el sistema de destino.

¿Cómo calcular cuotas de IVA con fórmulas Excel en una API .NET Core con IronXL?

Asigne fórmulas estándar de Excel a la propiedad .Formula de las celdas: por ejemplo, worksheet['D2'].Formula = '=B2*C2'. IronXL evalúa las fórmulas en tiempo de ejecución dentro del proceso .NET sin Excel, y puede leer el valor calculado inmediatamente con DecimalValue.

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

Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame