USO DE IRONXL

Cómo exportar a CSV en Blazor

Actualizado 23 de mayo, 2023
Compartir:

Hoy, nos sumergiremos en cómo usar Blazor e IronXL para convertir un archivo Excel a formato CSV. Al final de este tutorial, usted será capaz de crear una aplicación básica Blazor que exporta datos de Excel en varios formatos, incluyendo CSV.

Introducción a IronXL

IronXL es un potente Biblioteca .NET Excel diseñado para trabajar con archivos Excel en una amplia gama de formatos incluyendo XLS, XLSX, XLSM, XLTX y CSV. Permite a los desarrolladores leer, escribir y manipular datos de Excel mediante programación sin necesidad de Microsoft Office o Excel Interop.

Con IronXL, puede crear, cargar y guardar Libros de Excelasí como leer y escribir datos en celdas individuales o rangos. También admite funciones avanzadas como formato, fórmulas, gráficos y tablas dinámicas. IronXL es compatible con varios Frameworks .NET y puede utilizarse con lenguajes populares como C# y VB.NET.

Pasos para convertir un archivo Excel a CSV

Configuración del proyecto Blazor

Para empezar, necesitarás crear un nuevo proyecto Blazor Server. Abra Visual Studio, cree un nuevo proyecto y seleccione la plantilla "Blazor Server App". Dale un nombre a tu proyecto y haz clic en "Crear".

Una vez creado el proyecto, abra la carpeta Pages y localice el archivo Index.razor. Aquí es donde se añaden los componentes Blazor y se codifican para manejar las cargas y conversiones de archivos.

Instalación de IronXL

Antes de empezar a escribir código, es necesario instalar la biblioteca IronXL. Abra el Package Manager Console en Visual Studio y ejecute el siguiente comando:

Install-Package IronXL.Excel

Este comando instalará la librería IronXL en tu proyecto Blazor. Ahora estás listo para empezar a escribir código!

Creación del componente de carga de archivos

En primer lugar, cree un componente básico de carga de archivos que permita a los usuarios cargar un archivo Excel existente. A continuación, se añade el componente InputFile del espacio de nombres Microsoft.AspNetCore.Components.Forms. Añada el siguiente código a su archivo Index.razor, debajo de la línea "@page"/":

@using Microsoft.AspNetCore.Components.Forms
@using IronXL
@using System.IO
@using System.Threading.Tasks

<div class="container">
    <h3>File Upload</h3>

    <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" />
    <h3>Selected File: @originalFileName</h3>
    <h3 style="color:bisque">Is File converted: <span>@message</span></h3>
</div>
@using Microsoft.AspNetCore.Components.Forms
@using IronXL
@using System.IO
@using System.Threading.Tasks

<div class="container">
    <h3>File Upload</h3>

    <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" />
    <h3>Selected File: @originalFileName</h3>
    <h3 style="color:bisque">Is File converted: <span>@message</span></h3>
</div>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@using Microsoft.AspNetCore.Components.Forms @using IronXL @using System.IO @using System.Threading.Tasks <div class="container"> <h3> File Upload</h3> <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" /> <h3> Selected File: @originalFileName</h3> <h3 style="color:bisque"> @Is File converted: <span> @message</span></h3> </div>
VB   C#

Este código configura el componente de carga de archivos, con un botón y un área de mensajes para mostrar el estado de la conversión del archivo. El atributo accept del componente InputFile especifica los formatos de archivo aceptados.

Escribir el código de conversión de archivos

Ahora, vamos a escribir el código que maneja la carga y conversión de archivos. Para llevar a cabo esta tarea se utilizará una combinación de IronXL, Blazor y C#. Puede utilizar IronXL para convertir un CSV en un archivo Excel.

Añada el siguiente código a su archivo Index.razor, debajo del elemento div que añadió anteriormente.

@code {
    private string originalFileName;
    private string message = "";

    private async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var file = e.File;
        originalFileName = file.Name;

        try
        {
            //  Leer el archivo cargado en un flujo de memoria
            using var memoryStream = new MemoryStream();
            await file.OpenReadStream().CopyToAsync(memoryStream);

            //  Cargar el libro de trabajo utilizando IronXL
            WorkBook workBook = WorkBook.Load(memoryStream);

            //  Guardar el libro de trabajo como archivo CSV
            string outputPath = "sample.csv";
            workBook.SaveAsCsv(outputPath);

            message = "Conversion completed!";
        }
        catch (Exception ex)
        {
            message = $"An error occurred: {ex.Message}";
        }
    }
}
@code {
    private string originalFileName;
    private string message = "";

    private async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var file = e.File;
        originalFileName = file.Name;

        try
        {
            //  Leer el archivo cargado en un flujo de memoria
            using var memoryStream = new MemoryStream();
            await file.OpenReadStream().CopyToAsync(memoryStream);

            //  Cargar el libro de trabajo utilizando IronXL
            WorkBook workBook = WorkBook.Load(memoryStream);

            //  Guardar el libro de trabajo como archivo CSV
            string outputPath = "sample.csv";
            workBook.SaveAsCsv(outputPath);

            message = "Conversion completed!";
        }
        catch (Exception ex)
        {
            message = $"An error occurred: {ex.Message}";
        }
    }
}
code
If True Then
	private String originalFileName
	private String message = ""

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	private async Task OnInputFileChange(InputFileChangeEventArgs e)
'	{
'		var file = e.File;
'		originalFileName = file.Name;
'
'		try
'		{
'			'  Leer el archivo cargado en un flujo de memoria
'			var memoryStream = New MemoryStream();
'			await file.OpenReadStream().CopyToAsync(memoryStream);
'
'			'  Cargar el libro de trabajo utilizando IronXL
'			WorkBook workBook = WorkBook.Load(memoryStream);
'
'			'  Guardar el libro de trabajo como archivo CSV
'			string outputPath = "sample.csv";
'			workBook.SaveAsCsv(outputPath);
'
'			message = "Conversion completed!";
'		}
'		catch (Exception ex)
'		{
'			message = string.Format("An error occurred: {0}", ex.Message);
'		}
'	}
End If
VB   C#

Este código define un método privado llamado OnInputFileChange, que se activará cuando se cargue una hoja de cálculo Excel utilizando el componente InputFile; Excel puede estar en formato XLS o XLSX. El código lee el archivo básico de Excel cargado, lo carga en un archivo Libro de trabajo y luego guarda el WorkBook como un archivo CSV. El estado de la conversión se muestra en el área de mensajes de la página.

Desglose de códigos

Primero, mira el código completo:

@page "/"
@using Microsoft.AspNetCore.Components.Forms
@using IronXL
@using System.IO
@using System.Threading.Tasks

<style>
    body{
        background-color: skyblue
    }
    .container {
        max-width: 800px;
        margin: 0 auto;
        font-family: Arial, sans-serif;
    }

    h3 {
        margin-top: 30px;
        font-size: 30px;
        margin-bottom: 30px;
    }

    .button {
        background-color: #4CAF50;
        border: none;
        color: white;
        padding: 15px 32px;
        text-align: center;
        text-decoration: none;
        display: inline-block;
        font-size: 16px;
        margin: 15px 0;
        cursor: pointer;
    }
    span{
        font-size: 20px;
    }
</style>

<div class="container">
    <h3>File Upload</h3>

    <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" />
    <h3>Selected File: @originalFileName</h3>
    <h3 style="color:bisque">Is File converted: <span>@message</span></h3>
</div>

@code {
    private string originalFileName;
    private string message = "";

    private async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var file = e.File;
        originalFileName = file.Name;

        try
        {
            //  Leer el archivo cargado en un flujo de memoria
            using var memoryStream = new MemoryStream();
            await file.OpenReadStream().CopyToAsync(memoryStream);

            //  Cargar el libro de trabajo utilizando IronXL
            WorkBook workBook = WorkBook.Load(memoryStream);

            //  Guardar el libro de trabajo como archivo CSV
            string outputPath = "sample.csv";
            workBook.SaveAsCsv(outputPath);

            message = "Conversion completed!";
        }
        catch (Exception ex)
        {
            message = $"An error occurred: {ex.Message}";
        }
    }
}
@page "/"
@using Microsoft.AspNetCore.Components.Forms
@using IronXL
@using System.IO
@using System.Threading.Tasks

<style>
    body{
        background-color: skyblue
    }
    .container {
        max-width: 800px;
        margin: 0 auto;
        font-family: Arial, sans-serif;
    }

    h3 {
        margin-top: 30px;
        font-size: 30px;
        margin-bottom: 30px;
    }

    .button {
        background-color: #4CAF50;
        border: none;
        color: white;
        padding: 15px 32px;
        text-align: center;
        text-decoration: none;
        display: inline-block;
        font-size: 16px;
        margin: 15px 0;
        cursor: pointer;
    }
    span{
        font-size: 20px;
    }
</style>

<div class="container">
    <h3>File Upload</h3>

    <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" />
    <h3>Selected File: @originalFileName</h3>
    <h3 style="color:bisque">Is File converted: <span>@message</span></h3>
</div>

@code {
    private string originalFileName;
    private string message = "";

    private async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var file = e.File;
        originalFileName = file.Name;

        try
        {
            //  Leer el archivo cargado en un flujo de memoria
            using var memoryStream = new MemoryStream();
            await file.OpenReadStream().CopyToAsync(memoryStream);

            //  Cargar el libro de trabajo utilizando IronXL
            WorkBook workBook = WorkBook.Load(memoryStream);

            //  Guardar el libro de trabajo como archivo CSV
            string outputPath = "sample.csv";
            workBook.SaveAsCsv(outputPath);

            message = "Conversion completed!";
        }
        catch (Exception ex)
        {
            message = $"An error occurred: {ex.Message}";
        }
    }
}
page "/" [using] Microsoft.AspNetCore.Components.Forms [using] IronXL [using] System.IO [using] ReadOnly Property body() As System.Threading.Tasks(Of style)
		background-color: skyblue
End Property
	.container
	If True Then
		max-width: 800px
		margin:
		0 auto
		font-family: Arial, sans-serif
	End If

	h3
	If True Then
		margin-top: 30px
		font-size: 30px
		margin-bottom: 30px
	End If

	.button
	If True Then
		background-color: #4CAF50
		border:
		none
		color:
		white
		padding:
		15px 32px
		text-align: center
		text-decoration: none
		display:
		inline-block
		font-size: 16px
		margin:
		15px 0
		cursor:
		pointer
	End If
	span
	If True Then
		font-size: 20px
	End If
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </style> <div class="container"> <h3> File Upload</h3> <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" /> <h3> Selected File: originalFileName</h3> <h3 style="color:bisque"> @Is File converted: <span> message</span></h3> </div> @code
".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" /> (Of h3) Selected File: originalFileName</h3> <h3 style="color:bisque"> [Is] File converted: (Of span) message</span></h3> </div> code
If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </style> <div class="container"> <h3> File Upload</h3> <InputFile class="button" OnChange="@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" /> <h3> Selected File: originalFileName</h3> <h3 style
"@OnInputFileChange" accept=".xls,.xlsx,.xlsm,.xltx,.csv,.tsv" /> (Of h3) Selected File: originalFileName</h3> <h3 style
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </style> <div class="container"> <h3> File Upload</h3> <InputFile class="button" OnChange="@OnInputFileChange" accept
"button" OnChange="@OnInputFileChange" accept
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </style> <div class="container"> <h3> File Upload</h3> <InputFile class="button" OnChange
"container"> (Of h3) File Upload</h3> <InputFile class="button" OnChange
</style> <div class="container"> (Of h3) File Upload</h3> <InputFile class
	private String originalFileName
	private String message = ""

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	private async Task OnInputFileChange(InputFileChangeEventArgs e)
'	{
'		var file = e.File;
'		originalFileName = file.Name;
'
'		try
'		{
'			'  Leer el archivo cargado en un flujo de memoria
'			var memoryStream = New MemoryStream();
'			await file.OpenReadStream().CopyToAsync(memoryStream);
'
'			'  Cargar el libro de trabajo utilizando IronXL
'			WorkBook workBook = WorkBook.Load(memoryStream);
'
'			'  Guardar el libro de trabajo como archivo CSV
'			string outputPath = "sample.csv";
'			workBook.SaveAsCsv(outputPath);
'
'			message = "Conversion completed!";
'		}
'		catch (Exception ex)
'		{
'			message = string.Format("An error occurred: {0}", ex.Message);
'		}
'	}
End If
VB   C#

Desglosemos un poco más el código:

  1. Cuando se carga un archivo, se activa el método OnInputFileChange y se le pasa un objeto InputFileChangeEventArgs. Este objeto contiene información sobre el archivo cargado, como su nombre y tamaño.
  2. Almacena el nombre del archivo original en una variable llamada originalFileName para mostrarlo en la página.
  3. Dentro de un bloque try-catch, crea un nuevo objeto MemoryStream para leer el contenido del fichero subido. La sentencia using garantiza que el flujo de memoria se elimine correctamente cuando ya no se necesite.
  4. Utilice la palabra clave await para copiar de forma asíncrona el contenido del archivo cargado en el flujo de memoria. Esto garantiza que esta aplicación siga respondiendo mientras lee el archivo.
  5. A continuación, el WorkBook.Load se utiliza para cargar el contenido del flujo de memoria en un objeto WorkBook. Este objeto representa todo el libro de Excel, incluyendo sus hojas, celdas y datos.
  6. A continuación, especifique un nombre de archivo de salida para el archivo CSV convertido. En este caso, usaremos el nombre "muestra.csv"
  7. En Guardar como CSV del objeto WorkBook se utiliza para guardar el libro de trabajo como un archivo CSV con el nombre de archivo de salida especificado.
  8. Si la conversión se realiza correctamente, aparece un mensaje que indica que la conversión ha finalizado. Si se produce un error, captura la excepción y muestra un mensaje de error.

Probar la aplicación

Ahora que la aplicación Blazor está completa, es hora de probarla! Pulse F5 para ejecutar su aplicación en Visual Studio. Una vez que la aplicación se esté ejecutando, debería ver un botón de carga de archivos en la página.

Cómo exportar a CSV en Blazor, Figura 1: Ejecute la aplicación Blazor

Ejecuta la aplicación Blazor

Haga clic en el botón y seleccione un archivo Excel para cargar. Los formatos de archivo aceptados se enumeran en el atributo accept del componente InputFile.

Cómo exportar a CSV en Blazor, Figura 2: Seleccionar un archivo Excel

Seleccione un archivo Excel

Una vez seleccionado el archivo, la aplicación lo leerá, lo convertirá a formato CSV mediante IronXL y guardará el archivo convertido con el nombre de archivo de salida especificado. Debería aparecer un mensaje indicando el estado de la conversión, así como el nombre del archivo original.

Cómo exportar a CSV en Blazor, Figura 3: Estado de la conversión

Estado de la conversión

Enhorabuena! Usted ha construido con éxito una aplicación Blazor que puede exportar archivos de Excel a formato CSV utilizando IronXL. La siguiente captura de pantalla muestra la salida del programa anterior.

Cómo exportar a CSV en Blazor, Figura 4: El archivo Excel de salida

El archivo Excel de salida

Conclusión

Este tutorial demuestra cómo construir una aplicación Blazor que puede exportar archivos de Excel a formato CSV utilizando IronXL. Hemos demostrado cómo crear un componente de carga de archivos, manejar cargas de archivos y convertir archivos de Excel a formato CSV utilizando las potentes funciones de IronXL.

Al incorporar IronXL a sus aplicaciones Blazor, podrá manejar fácilmente una gran variedad de tareas relacionadas con Excel, como la importación, manipulación y exportación de datos. Esto abre un amplio abanico de posibilidades para sus proyectos y le ayuda a ofrecer una experiencia más rica a sus usuarios. Puede convertir CSV a Excel en Blazor utilizando la biblioteca IronXL.

IronXL ofrece un prueba gratuita para que pueda probar sus funciones y capacidades antes de comprometerse a comprarlo. Después del período de prueba, las licencias para IronXL comienzan en $599.

< ANTERIOR
Cómo convertir Excel a Datagridview en C#
SIGUIENTE >
Cómo convertir Excel a Datatable en C#

¿Listo para empezar? Versión: 2024.6 recién publicada

Comenzar prueba gratuita Descargas totales: 850,626
Ver licencias >