Saltar al pie de página
USANDO IRONXL

C# CSV a XLSX: Convertir archivos CSV a formato Excel

Convertir archivos CSV al formato XLSX es un requisito frecuente en los equipos de cumplimiento fiscal que preparan datos para el SII (Suministro Inmediato de Información) de la AEAT. Los ficheros de operaciones que llegan en CSV —exportados desde ERP, TPV o sistemas contables— deben transformarse en XLSX estructurados antes de la presentación telemática. Mientras que el CSV almacena datos tabulares sin procesar, el formato XLSX de Excel admite fórmulas, hojas múltiples, gráficos, formato de celdas y validación de datos, características que exigen tanto las aplicaciones empresariales modernas como los flujos de trabajo de declaraciones AEAT.

IronXL es una biblioteca .NET que gestiona esta conversión directamente, sin necesidad de Microsoft Office ni del SDK de Open XML. Lee el archivo CSV de origen, analiza los datos delimitados y escribe un libro de Excel XLSX totalmente compatible. Funciona en Linux y Docker, lo que la convierte en la opción ideal para convertir CSV de operaciones SII a XLSX para presentación telemática AEAT en servidores en la nube. Instálalo a través de NuGet y empieza una prueba gratuita para seguir los ejemplos de código que se muestran a continuación.

¿Cómo se convierten archivos CSV a formato XLSX en C#?

La conversión principal requiere cargar el archivo CSV y guardarlo en formato Excel. IronXL proporciona WorkBook.LoadCSV, que analiza el código fuente delimitado y crea un libro de trabajo listo para exportar. El método acepta la ruta del archivo, el formato Excel de destino y el carácter delimitador.

En los flujos de trabajo SII/AEAT, el CSV de entrada suele contener registros de facturas emitidas o recibidas. IronXL convierte ese CSV directamente en un XLSX válido listo para adjuntar en la sede electrónica de la AEAT o para procesar con herramientas de validación del modelo 303.

using IronXL;

// Load CSV file and convert to XLSX format
WorkBook workbook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");

// Access the default worksheet containing CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel XLSX file
workbook.SaveAs("output.xlsx");
using IronXL;

// Load CSV file and convert to XLSX format
WorkBook workbook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");

// Access the default worksheet containing CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel XLSX file
workbook.SaveAs("output.xlsx");
Imports IronXL

' Load CSV file and convert to XLSX format
Dim workbook As WorkBook = WorkBook.LoadCSV("data.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

' Access the default worksheet containing CSV data
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

' Save as Excel XLSX file
workbook.SaveAs("output.xlsx")
$vbLabelText   $csharpLabel

Resultado

C# CSV a XLSX: Una guía completa para desarrolladores: Imagen 1 - Ejemplo de resultado de la conversión de CSV a Excel

El método LoadCSV acepta tres parámetros clave: el nombre del archivo, la constante del formato Excel de destino y el delimitador de lista utilizado en el archivo de origen. Este enfoque conserva todos los datos de cadena y valores numéricos de la hoja CSV original al tiempo que crea un archivo XLSX correctamente estructurado. La clase WorkBook sirve como centro neurálgico para todas las operaciones de la hoja de cálculo. Una vez cargados, los datos CSV se vuelven accesibles a través de hojas de cálculo, lo que permite una mayor manipulación antes de guardar el archivo final de Excel.

Para cargar archivos XLSX existentes en lugar de CSV, utilice WorkBook.Load("file.xlsx"), que detecta automáticamente el formato a partir de la extensión del archivo. Esto facilita la creación de flujos de trabajo que acepten entradas en formato CSV o Excel y las normalicen a un único formato de salida, requisito habitual cuando se consolidan registros de distintos sistemas contables para la declaración trimestral IVA (modelo 303) o la declaración anual (modelo 390).

¿Cuáles son los beneficios de convertir formato CSV a Excel para declaraciones AEAT?

En el contexto de la normativa española, convertir CSV a XLSX con IronXL en Linux ofrece ventajas directas para los departamentos de cumplimiento fiscal:

  • Hojas de cálculo múltiples: Los archivos de Excel admiten varias hojas dentro de un mismo libro. Un único fichero XLSX puede contener la hoja del modelo 347 (operaciones con terceros superiores a 3.005,06 €) junto a una hoja resumen, facilitando la revisión antes de la presentación a la AEAT.
  • Compatibilidad con fórmulas: Escribe cálculos de bases imponibles e IVA directamente en las celdas. Las fórmulas se recalculan automáticamente cuando cambian los datos, eliminando reprocesos manuales.
  • Gráficos visuales: Crea visualizaciones de los volúmenes de facturación mensual relevantes para el SII sin instalar Microsoft Excel en el servidor.
  • Formato de celdas: Controle fuentes, colores y formatos numéricos para crear documentos que cumplan los estándares de presentación del Banco de España / CNMV en XLSX.
  • Validación de datos: Restringe la entrada en celdas a valores o rangos válidos, evitando errores en los ficheros antes de la presentación telemática.
  • Protección con contraseña: Proteja las hojas con contraseña para controlar el acceso a datos fiscales sujetos a la LOPDGDD (minimización de datos: solo exporte las columnas necesarias).

Estas capacidades convierten al formato XLSX en la opción estándar para generar ficheros SII, paneles de control fiscal, y cualquier aplicación que deba producir declaraciones estructuradas para la AEAT a partir de datos CSV en bruto.

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

IronXL se distribuye como un paquete NuGet. Instálalo desde la consola del gestor de paquetes en Visual Studio:

Install-Package IronXl
Install-Package IronXl
SHELL

O utilizando la CLI de .NET:

dotnet add package IronXl
dotnet add package IronXl
SHELL

Tras la instalación, añada using IronXL; a cualquier archivo que trabaje con hojas de cálculo. El paquete está destinado a .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5 hasta .NET 10, y es compatible con entornos de implementación de Windows, Linux, macOS, Docker y Azure.

No se requieren dependencias de tiempo de ejecución adicionales ni la instalación de Microsoft Office. IronXL lee y escribe archivos XLSX utilizando su propio analizador y generador, lo que lo hace adecuado para implementaciones del lado del servidor y sin interfaz gráfica donde no se puede instalar Office —escenario habitual en los servidores Linux de empresas que generan ficheros SII para la AEAT sin licencias Office.

¿Cómo se maneja la codificación CSV durante la conversión de datos SII?

Los ficheros CSV que provienen de sistemas contables españoles, del portal de la AEAT o de exportaciones de ERP suelen contener caracteres especiales (tildes, eñes, símbolos del euro). El manejo correcto de la codificación garantiza que los caracteres de los registros SII, como los nombres de empresas con caracteres no ASCII, se mantengan intactos en el archivo XLSX resultante para la presentación al modelo 390.

using IronXL;
using System.Text;

// Load CSV with explicit encoding specification
WorkBook workbook = WorkBook.LoadCSV("international-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",",
    encoding: Encoding.UTF8);

// Access the worksheet containing the encoded data
WorkSheet sheet = workbook.DefaultWorkSheet;

// Inspect a cell to verify encoding was preserved
string cellValue = sheet["A1"].StringValue;

// Save the converted Excel file
workbook.SaveAs("encoded-output.xlsx");
using IronXL;
using System.Text;

// Load CSV with explicit encoding specification
WorkBook workbook = WorkBook.LoadCSV("international-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",",
    encoding: Encoding.UTF8);

// Access the worksheet containing the encoded data
WorkSheet sheet = workbook.DefaultWorkSheet;

// Inspect a cell to verify encoding was preserved
string cellValue = sheet["A1"].StringValue;

// Save the converted Excel file
workbook.SaveAs("encoded-output.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Archivo XLSX de salida

C# CSV a XLSX: Una guía completa para desarrolladores: Imagen 2 - CSV a XLSX con toda la codificación gestionada

IronXL detecta automáticamente los formatos de codificación más comunes, incluido UTF-8, para la mayoría de los archivos CSV estándar. Para archivos con codificación no estándar, como Windows-1252, ISO-8859-1 o Shift-JIS, pase la instancia System.Text.Encoding a la llamada LoadCSV. La documentación de la clase Encoding en Microsoft Learn enumera todos los nombres de codificación compatibles.

Al recuperar datos CSV de un servidor remoto, utilice HttpClient para descargar el flujo, guárdelo como un archivo temporal y, a continuación, cárguelo mediante LoadCSV. Este patrón funciona en aplicaciones .NET alojadas en la nube en las que los archivos CSV llegan como respuestas HTTP desde API de terceros o desde los propios servicios de la AEAT.

¿Cómo se aplica el formato de celda tras la conversión a XLSX para presentaciones AEAT?

Los datos CSV sin procesar no contienen información de formato. Tras la conversión a XLSX, aplique formatos numéricos, fuentes y colores de fondo para que la hoja de cálculo resulte legible. En el contexto de declaraciones AEAT, este paso es especialmente relevante: los ficheros XLSX del modelo 347 o del modelo 303 deben presentar importes en formato monetario con separador de miles y dos decimales, coherentes con los requisitos de presentación del SII.

using IronXL;
using IronXL.Styles;

// Load CSV data
WorkBook workbook = WorkBook.LoadCSV("sales-report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet sheet = workbook.DefaultWorkSheet;

// Format the header row with bold text and background color
Range headerRow = sheet["A1:Z1"];
headerRow.Style.Font.Bold = true;
headerRow.Style.SetBackgroundColor("#4472C4");
headerRow.Style.Font.Color = "#FFFFFF";

// Apply currency format to a numeric column
Range priceColumn = sheet["C2:C100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Auto-fit column widths for readability
sheet.AutoSizeColumn(0);
sheet.AutoSizeColumn(1);
sheet.AutoSizeColumn(2);

workbook.SaveAs("formatted-report.xlsx");
using IronXL;
using IronXL.Styles;

// Load CSV data
WorkBook workbook = WorkBook.LoadCSV("sales-report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet sheet = workbook.DefaultWorkSheet;

// Format the header row with bold text and background color
Range headerRow = sheet["A1:Z1"];
headerRow.Style.Font.Bold = true;
headerRow.Style.SetBackgroundColor("#4472C4");
headerRow.Style.Font.Color = "#FFFFFF";

// Apply currency format to a numeric column
Range priceColumn = sheet["C2:C100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Auto-fit column widths for readability
sheet.AutoSizeColumn(0);
sheet.AutoSizeColumn(1);
sheet.AutoSizeColumn(2);

workbook.SaveAs("formatted-report.xlsx");
Imports IronXL
Imports IronXL.Styles

' Load CSV data
Dim workbook As WorkBook = WorkBook.LoadCSV("sales-report.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

Dim sheet As WorkSheet = workbook.DefaultWorkSheet

' Format the header row with bold text and background color
Dim headerRow As Range = sheet("A1:Z1")
headerRow.Style.Font.Bold = True
headerRow.Style.SetBackgroundColor("#4472C4")
headerRow.Style.Font.Color = "#FFFFFF"

' Apply currency format to a numeric column
Dim priceColumn As Range = sheet("C2:C100")
priceColumn.Style.NumberFormat = "$#,##0.00"

' Auto-fit column widths for readability
sheet.AutoSizeColumn(0)
sheet.AutoSizeColumn(1)
sheet.AutoSizeColumn(2)

workbook.SaveAs("formatted-report.xlsx")
$vbLabelText   $csharpLabel

IronXL permite aplicar estilos a celdas y rangos mediante la propiedad Style, que refleja las opciones de formato disponibles en la interfaz de usuario de Excel. Los formatos numéricos siguen la sintaxis de formato numérico de Excel documentada por Microsoft. El método SetBackgroundColor acepta cadenas de color hexadecimales, lo que facilita la aplicación de los colores de marca a los informes generados. Consulte la referencia completa de la API de formato de celdas para ver las propiedades de estilo disponibles.

¿Cómo puedes agregar gráficos después de convertir datos CSV de SII?

Una vez que los datos CSV de operaciones SII se encuentran en un libro de Excel, IronXL permite crear gráficos directamente a partir de esos datos. Los gráficos transforman los datos brutos de facturación —por ejemplo, la evolución mensual de bases imponibles para el TicketBAI en el País Vasco (Bizkaia, Gipuzkoa, Araba) o los volúmenes de VeriFactu bajo el Real Decreto-Ley 15/2025— en información visual sin necesidad de instalar Microsoft Excel en el servidor.

using IronXL;
using IronXL.Drawing.Charts;

// Load CSV and convert to Excel format
WorkBook workbook = WorkBook.LoadCSV("sales-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet worksheet = workbook.DefaultWorkSheet;

// Create a column chart from the converted CSV data
IChart chart = worksheet.CreateChart(ChartType.Column, 10, 0, 25, 10);

// Add data series from the worksheet ranges
IChartSeries series = chart.AddSeries("A2:A10", "B2:B10");
series.Title = "Monthly Sales";

// Configure chart appearance
chart.SetTitle("Sales Performance");
chart.SetLegendPosition(LegendPosition.Bottom);

// Plot the chart and save the workbook
chart.Plot();
workbook.SaveAs("sales-with-chart.xlsx");
using IronXL;
using IronXL.Drawing.Charts;

// Load CSV and convert to Excel format
WorkBook workbook = WorkBook.LoadCSV("sales-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet worksheet = workbook.DefaultWorkSheet;

// Create a column chart from the converted CSV data
IChart chart = worksheet.CreateChart(ChartType.Column, 10, 0, 25, 10);

// Add data series from the worksheet ranges
IChartSeries series = chart.AddSeries("A2:A10", "B2:B10");
series.Title = "Monthly Sales";

// Configure chart appearance
chart.SetTitle("Sales Performance");
chart.SetLegendPosition(LegendPosition.Bottom);

// Plot the chart and save the workbook
chart.Plot();
workbook.SaveAs("sales-with-chart.xlsx");
Imports IronXL
Imports IronXL.Drawing.Charts

' Load CSV and convert to Excel format
Dim workbook As WorkBook = WorkBook.LoadCSV("sales-data.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

' Create a column chart from the converted CSV data
Dim chart As IChart = worksheet.CreateChart(ChartType.Column, 10, 0, 25, 10)

' Add data series from the worksheet ranges
Dim series As IChartSeries = chart.AddSeries("A2:A10", "B2:B10")
series.Title = "Monthly Sales"

' Configure chart appearance
chart.SetTitle("Sales Performance")
chart.SetLegendPosition(LegendPosition.Bottom)

' Plot the chart and save the workbook
chart.Plot()
workbook.SaveAs("sales-with-chart.xlsx")
$vbLabelText   $csharpLabel

Resultado

C# CSV a XLSX: Una guía completa para desarrolladores: Imagen 3 - Resultado de la conversión de un archivo CSV a un archivo de Excel con un gráfico

El método CreateChart acepta el tipo de gráfico y cuatro parámetros de posicionamiento (fila superior, columna izquierda, fila inferior, columna derecha). El método AddSeries vincula rangos de celdas de una hoja de cálculo a los ejes de un gráfico, creando visualizaciones dinámicas que se actualizan cuando cambian los datos subyacentes. IronXL admite gráficos de columnas, barras, líneas, áreas y circulares a través de la enumeración ChartType. Para obtener una lista completa de las configuraciones de gráficos compatibles, consulte el tutorial de gráficos de IronXL.

¿Cómo se convierte un CSV de registros SII a una DataTable y luego a Excel?

En los casos en los que sea necesario manipular los datos antes de la exportación —por ejemplo, filtrar las facturas del modelo 347 con importe superior a 3.005,06 €, o preparar registros VeriFactu para el cumplimiento del Real Decreto-Ley 15/2025—, la conversión mediante un DataTable ofrece la máxima flexibilidad. Este enfoque permite filtrar, transformar, ordenar o validar filas durante el proceso de conversión, cumpliendo también con los principios de minimización de datos de la LOPDGDD: solo se exportan las columnas necesarias para la declaración AEAT.

using IronXL;
using System.Data;

// Load CSV file into workbook
WorkBook sourceWorkbook = WorkBook.LoadCSV("input.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

// Convert worksheet to DataTable for manipulation
DataTable table = sourceWorkbook.DefaultWorkSheet.ToDataTable(true);

// Filter rows -- keep only rows where the third column value is greater than 100
DataRow[] filtered = table.Select("Column3 > 100");
DataTable filteredTable = filtered.Length > 0 ? filtered.CopyToDataTable() : table.Clone();

// Create new workbook from modified data
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.CreateWorkSheet("Processed Data");

// Import filtered DataTable back into Excel
outputSheet.LoadFromDataTable(filteredTable, true);

// Save the final XLSX file
outputWorkbook.SaveAs("processed-output.xlsx");
using IronXL;
using System.Data;

// Load CSV file into workbook
WorkBook sourceWorkbook = WorkBook.LoadCSV("input.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

// Convert worksheet to DataTable for manipulation
DataTable table = sourceWorkbook.DefaultWorkSheet.ToDataTable(true);

// Filter rows -- keep only rows where the third column value is greater than 100
DataRow[] filtered = table.Select("Column3 > 100");
DataTable filteredTable = filtered.Length > 0 ? filtered.CopyToDataTable() : table.Clone();

// Create new workbook from modified data
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.CreateWorkSheet("Processed Data");

// Import filtered DataTable back into Excel
outputSheet.LoadFromDataTable(filteredTable, true);

// Save the final XLSX file
outputWorkbook.SaveAs("processed-output.xlsx");
Imports IronXL
Imports System.Data

' Load CSV file into workbook
Dim sourceWorkbook As WorkBook = WorkBook.LoadCSV("input.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

' Convert worksheet to DataTable for manipulation
Dim table As DataTable = sourceWorkbook.DefaultWorkSheet.ToDataTable(True)

' Filter rows -- keep only rows where the third column value is greater than 100
Dim filtered As DataRow() = table.Select("Column3 > 100")
Dim filteredTable As DataTable = If(filtered.Length > 0, filtered.CopyToDataTable(), table.Clone())

' Create new workbook from modified data
Dim outputWorkbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim outputSheet As WorkSheet = outputWorkbook.CreateWorkSheet("Processed Data")

' Import filtered DataTable back into Excel
outputSheet.LoadFromDataTable(filteredTable, True)

' Save the final XLSX file
outputWorkbook.SaveAs("processed-output.xlsx")
$vbLabelText   $csharpLabel

Resultado

C# CSV a XLSX: Una guía completa para desarrolladores: Imagen 4 - CSV a DataTable a salida XLSX

El método ToDataTable exporta datos de la hoja de cálculo a un DataTable de .NET, y el parámetro booleano controla si la primera fila se trata como encabezados de columna. LoadFromDataTable importa los datos de nuevo, escribiendo los encabezados de columna como la primera fila cuando el segundo parámetro es true. Esta conversión bidireccional permite el uso completo de las operaciones LINQ y ADO.NET entre la importación de CSV y la exportación a Excel. Consulte la documentación de IronXL DataTable para ver opciones adicionales.

¿Cómo se guarda un archivo XLSX en un flujo para descargas de declaraciones AEAT?

Las aplicaciones del lado del servidor —por ejemplo, un portal interno que genera el fichero XLSX de la declaración trimestral IVA (modelo 303) bajo demanda— a menudo deben entregar archivos Excel directamente en respuestas HTTP en lugar de escribir archivos temporales en el disco. IronXL admite el guardado de libros de trabajo en MemoryStream para este fin, lo que resulta especialmente útil en entornos Docker y servidores Linux donde el almacenamiento en disco es efímero.

using IronXL;
using System.IO;

// Load and convert CSV data
WorkBook workbook = WorkBook.LoadCSV("report-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet sheet = workbook.DefaultWorkSheet;

// Save workbook to a memory stream instead of a file
using MemoryStream stream = new MemoryStream();
workbook.SaveAs(stream);

// Reset stream position for reading
stream.Position = 0;

// The stream is now ready to pass to an HTTP response, upload to cloud storage,
// or attach to an email. For ASP.NET Core:
// return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");

// Write bytes to verify stream contains XLSX data
byte[] xlsxBytes = stream.ToArray();
Console.WriteLine($"Generated XLSX size: {xlsxBytes.Length} bytes");
using IronXL;
using System.IO;

// Load and convert CSV data
WorkBook workbook = WorkBook.LoadCSV("report-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

WorkSheet sheet = workbook.DefaultWorkSheet;

// Save workbook to a memory stream instead of a file
using MemoryStream stream = new MemoryStream();
workbook.SaveAs(stream);

// Reset stream position for reading
stream.Position = 0;

// The stream is now ready to pass to an HTTP response, upload to cloud storage,
// or attach to an email. For ASP.NET Core:
// return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");

// Write bytes to verify stream contains XLSX data
byte[] xlsxBytes = stream.ToArray();
Console.WriteLine($"Generated XLSX size: {xlsxBytes.Length} bytes");
Imports IronXL
Imports System.IO

' Load and convert CSV data
Dim workbook As WorkBook = WorkBook.LoadCSV("report-data.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

Dim sheet As WorkSheet = workbook.DefaultWorkSheet

' Save workbook to a memory stream instead of a file
Using stream As New MemoryStream()
    workbook.SaveAs(stream)

    ' Reset stream position for reading
    stream.Position = 0

    ' The stream is now ready to pass to an HTTP response, upload to cloud storage,
    ' or attach to an email. For ASP.NET Core:
    ' Return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx")

    ' Write bytes to verify stream contains XLSX data
    Dim xlsxBytes As Byte() = stream.ToArray()
    Console.WriteLine($"Generated XLSX size: {xlsxBytes.Length} bytes")
End Using
$vbLabelText   $csharpLabel

Ahorrar en un flujo evita las operaciones de lectura/escritura en disco y elimina la necesidad de limpiar archivos temporales. Este patrón se utiliza ampliamente en los puntos finales de descarga de archivos de .NET Core, donde el XLSX se genera bajo demanda. La sobrecarga SaveAs(Stream) escribe un archivo XLSX completo y válido en cualquier instancia de flujo de escritura.

¿Cómo se trabaja con varias hojas de cálculo en un libro de trabajo de declaraciones AEAT?

Un único libro de Excel (XLSX) puede contener varias hojas de cálculo. Tras convertir un archivo CSV de operaciones SII, el libro contiene una hoja de forma predeterminada. En los flujos de trabajo de cumplimiento fiscal, se crean hojas adicionales para organizar los datos por tipo de declaración: por ejemplo, una hoja para el modelo 303, otra para el modelo 347 y una hoja resumen para el modelo 390 (resumen anual IVA). Las instituciones financieras supervisadas por el Banco de España / CNMV pueden estructurar sus envíos XLSX de forma similar, con pestañas separadas por categoría regulatoria.

using IronXL;

// Load primary CSV data
WorkBook workbook = WorkBook.LoadCSV("quarterly-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

// Rename the default sheet created from the CSV
WorkSheet q1Sheet = workbook.DefaultWorkSheet;
q1Sheet.Name = "Q1 Data";

// Create additional worksheets for summary information
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");

// Write summary headers and formulas
summarySheet["A1"].Value = "Total Records";
summarySheet["B1"].Formula = $"=COUNTA('{q1Sheet.Name}'!A:A)-1";

summarySheet["A2"].Value = "Data Sheet";
summarySheet["B2"].Value = q1Sheet.Name;

// Save the multi-sheet workbook
workbook.SaveAs("multi-sheet-report.xlsx");
using IronXL;

// Load primary CSV data
WorkBook workbook = WorkBook.LoadCSV("quarterly-data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    ListDelimiter: ",");

// Rename the default sheet created from the CSV
WorkSheet q1Sheet = workbook.DefaultWorkSheet;
q1Sheet.Name = "Q1 Data";

// Create additional worksheets for summary information
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");

// Write summary headers and formulas
summarySheet["A1"].Value = "Total Records";
summarySheet["B1"].Formula = $"=COUNTA('{q1Sheet.Name}'!A:A)-1";

summarySheet["A2"].Value = "Data Sheet";
summarySheet["B2"].Value = q1Sheet.Name;

// Save the multi-sheet workbook
workbook.SaveAs("multi-sheet-report.xlsx");
Imports IronXL

' Load primary CSV data
Dim workbook As WorkBook = WorkBook.LoadCSV("quarterly-data.csv", fileFormat:=ExcelFileFormat.XLSX, ListDelimiter:=",")

' Rename the default sheet created from the CSV
Dim q1Sheet As WorkSheet = workbook.DefaultWorkSheet
q1Sheet.Name = "Q1 Data"

' Create additional worksheets for summary information
Dim summarySheet As WorkSheet = workbook.CreateWorkSheet("Summary")

' Write summary headers and formulas
summarySheet("A1").Value = "Total Records"
summarySheet("B1").Formula = $"=COUNTA('{q1Sheet.Name}'!A:A)-1"

summarySheet("A2").Value = "Data Sheet"
summarySheet("B2").Value = q1Sheet.Name

' Save the multi-sheet workbook
workbook.SaveAs("multi-sheet-report.xlsx")
$vbLabelText   $csharpLabel

El método CreateWorkSheet añade una nueva hoja vacía al libro. Se puede acceder a las hojas por nombre o por índice a través de workbook.WorkSheets. Las referencias a fórmulas entre hojas utilizan la notación estándar de Excel 'SheetName'!CellRef. Para obtener más información sobre las operaciones con varias hojas, consulte la guía de hojas de cálculo múltiples de IronXL.

¿Cuales son tus próximos pasos?

Convertir archivos CSV a XLSX en C# con IronXL —incluida la librería Excel C# SII AEAT— requiere solo unas pocas líneas de código y genera un libro de Excel totalmente compatible sin ninguna dependencia de Microsoft Office. IronXL genera ficheros SII y Excel sin Office para declaraciones AEAT ejecutándose en Linux/Docker, lo que elimina la dependencia de licencias Microsoft en servidores de producción. Los ejemplos anteriores abarcan el flujo de trabajo completo: desde la carga y el guardado básico de archivos CSV hasta el manejo de la codificación, el formato de celdas, la creación de gráficos, la integración de DataTable con filtrado según umbrales del modelo 347, la salida de flujos para declaraciones bajo demanda y los libros con varias hojas para los modelos 303, 347 y 390.

Capacidades clave cubiertas en esta guía:

  • Conversión básica de CSV a XLSX con WorkBook.LoadCSV y SaveAs para ficheros SII
  • Especificación de codificación para conjuntos de caracteres internacionales (tildes, eñes)
  • Formato de celdas y rangos para cumplir los requisitos de presentación AEAT
  • Creación de gráficos integrada directamente en el archivo XLSX (sin Office)
  • Intercambio de datos de DataTable para datos filtrados por modelo 347 y minimización LOPDGDD
  • Salida de MemoryStream para la entrega de declaraciones del lado del servidor en Docker/Linux
  • Creación de libros de trabajo de varias hojas (modelos 303, 347, 390)

IronXL es compatible con implementaciones en Windows, Linux, macOS, Docker y Azure en .NET Framework, .NET Core y .NET 5 a 10. Para explorar más capacidades, consulta la documentación de IronXL, examina la referencia de objetos de la API de Excel o revisa las guías prácticas de IronXL sobre temas como la lectura de archivos de Excel, la fusión de celdas y la aplicación de fórmulas. Descargue una versión de prueba gratuita para probar todas las funciones en un entorno de desarrollo, o adquiera una licencia para su implementación en producción.

Empiece con IronXL ahora.
green arrow pointer

Preguntas Frecuentes

¿Cómo convertir un CSV de operaciones SII a XLSX para la AEAT con IronXL sin Office?

Utilice WorkBook.LoadCSV de IronXL para cargar el fichero CSV de operaciones SII y llame a workbook.SaveAs('declaracion-sii.xlsx'). IronXL se ejecuta en Linux/Docker sin Microsoft Office, generando un XLSX válido para la presentación telemática a la AEAT.

¿Puede IronXL generar ficheros XLSX para los modelos 303, 347 y 390 de la AEAT?

Sí. Tras convertir el CSV de facturas o registros contables a XLSX con IronXL, puede crear hojas separadas para el modelo 303 (declaración trimestral IVA), el modelo 347 (operaciones con terceros superiores a 3.005,06 €) y el modelo 390 (resumen anual IVA), todo en un único libro.

¿Cómo aplicar la minimización de datos de la LOPDGDD al exportar a XLSX para la AEAT?

Al usar la conversión CSV → DataTable de IronXL, filtre y proyecte únicamente las columnas necesarias para la declaración AEAT antes de escribir el XLSX. Así cumple con la LOPDGDD: solo se exportan los datos estrictamente necesarios para el trámite fiscal.

¿Qué paquete NuGet se utiliza para convertir CSV a Excel en C#?

Instale el paquete NuGet IronXL mediante 'Install-Package IronXL' en Visual Studio o 'dotnet add package IronXL' desde la CLI de .NET. Compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5 a 10.

¿Cómo se especifica el delimitador al cargar un archivo CSV con IronXL?

Pase el parámetro ListDelimiter a WorkBook.LoadCSV, por ejemplo: WorkBook.LoadCSV('data.csv', fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ',') para archivos separados por comas o ListDelimiter: ';' para archivos separados por punto y coma.

¿Puede IronXL manejar archivos CSV con caracteres no ASCII (tildes, eñes)?

Sí. Pase una instancia de System.Text.Encoding al parámetro de codificación de LoadCSV. IronXL detecta automáticamente UTF-8. Para Windows-1252 o ISO-8859-1 (habitual en exportaciones de ERP españoles), especifique la codificación explícitamente.

¿Cómo guardar un archivo XLSX de declaración AEAT en un MemoryStream para descarga HTTP?

Llame a workbook.SaveAs(stream), donde stream es un MemoryStream, y restablezca stream.Position a 0 antes de devolverlo. En ASP.NET Core: return File(stream, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'modelo303.xlsx').

¿IronXL admite varias hojas de cálculo al convertir desde CSV?

Sí. Tras cargar un archivo CSV, el libro contiene una hoja predeterminada. Llame a workbook.CreateWorkSheet('SheetName') para agregar hojas adicionales (por ejemplo, una por cada modelo AEAT). Las hojas pueden referenciarse entre sí con la sintaxis estándar de Excel.

¿Qué versiones y plataformas .NET admite IronXL?

IronXL es compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5 a .NET 10. Funciona en Windows, Linux, macOS, Docker y Azure, lo que lo hace adecuado para servidores de cumplimiento SII/AEAT en entornos cloud.

¿Cómo se aplican formatos de celda (importes en euros) después de la conversión CSV?

Después de cargar el CSV, acceda a un rango con sheet['A1:Z1'] y configure Style.Font.Bold = true, Style.SetBackgroundColor('#hex') o Style.NumberFormat = '#.##0,00 €'. IronXL expone la API completa de estilos de Excel mediante la propiedad Style.

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