Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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.
IronXL es un potenteBiblioteca .NET Excel diseñado para trabajar con archivos Excel enuna amplia gama de formatosincluyendo 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 guardarLibros de Excelasí como leer y escribir datos en celdas individuales o rangos. También admite funciones avanzadas comoformato, fórmulas, gráficosy tablas dinámicas. IronXL es compatible con varios Frameworks .NET y puede utilizarse con lenguajes populares como C# y VB.NET.
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.
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!
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>
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.
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 paraconvertir 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
{
// Read the uploaded file into a memory stream
using var memoryStream = new MemoryStream();
await file.OpenReadStream().CopyToAsync(memoryStream);
// Load the workbook using IronXL
WorkBook workBook = WorkBook.Load(memoryStream);
// Save the workbook as a CSV file
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
{
// Read the uploaded file into a memory stream
using var memoryStream = new MemoryStream();
await file.OpenReadStream().CopyToAsync(memoryStream);
// Load the workbook using IronXL
WorkBook workBook = WorkBook.Load(memoryStream);
// Save the workbook as a CSV file
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
' {
' ' Read the uploaded file into a memory stream
' var memoryStream = New MemoryStream();
' await file.OpenReadStream().CopyToAsync(memoryStream);
'
' ' Load the workbook using IronXL
' WorkBook workBook = WorkBook.Load(memoryStream);
'
' ' Save the workbook as a CSV file
' string outputPath = "sample.csv";
' workBook.SaveAsCsv(outputPath);
'
' message = "Conversion completed!";
' }
' catch (Exception ex)
' {
' message = string.Format("An error occurred: {0}", ex.Message);
' }
' }
End If
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 archivoLibro 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.
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
{
// Read the uploaded file into a memory stream
using var memoryStream = new MemoryStream();
await file.OpenReadStream().CopyToAsync(memoryStream);
// Load the workbook using IronXL
WorkBook workBook = WorkBook.Load(memoryStream);
// Save the workbook as a CSV file
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
{
// Read the uploaded file into a memory stream
using var memoryStream = new MemoryStream();
await file.OpenReadStream().CopyToAsync(memoryStream);
// Load the workbook using IronXL
WorkBook workBook = WorkBook.Load(memoryStream);
// Save the workbook as a CSV file
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
' {
' ' Read the uploaded file into a memory stream
' var memoryStream = New MemoryStream();
' await file.OpenReadStream().CopyToAsync(memoryStream);
'
' ' Load the workbook using IronXL
' WorkBook workBook = WorkBook.Load(memoryStream);
'
' ' Save the workbook as a CSV file
' string outputPath = "sample.csv";
' workBook.SaveAsCsv(outputPath);
'
' message = "Conversion completed!";
' }
' catch (Exception ex)
' {
' message = string.Format("An error occurred: {0}", ex.Message);
' }
' }
End If
Desglosemos un poco más el código:
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.
Almacena el nombre del archivo original en una variable llamada originalFileName
para mostrarlo en la página.
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.
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.
A continuación, elWorkBook.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.
A continuación, especifique un nombre de archivo de salida para el archivo CSV convertido. En este caso, usaremos el nombre "muestra.csv"
EnGuardar 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.
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.
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
.
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.
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.
El archivo Excel de salida
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. Puedeconvertir CSV a Excel en Blazor utilizando la biblioteca IronXL.
IronXL ofrece unprueba gratuitapara 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 $749.
9 productos API .NET para sus documentos de oficina