Blazor Leer Archivo Excel en C# Usando IronXL (Ejemplo Tutorial)

Introducción

Blazor es un framework web .NET de código abierto creado por Microsoft. Una aplicación Blazor funciona compilando el código C# en JavaScript y HTML compatibles con el navegador. En este tutorial, voy a compartir conocimientos sobre el método mejor y más fácil para la lectura de documentos de Excel / hojas de trabajo en Blazor aplicación del lado del servidor utilizando la biblioteca IronXL C #.

Demostración de IronXL Visualización de Excel en Blazor

Paso 1 - Crear un proyecto Blazor en Visual Studio

Tengo un archivo XLSX que contiene los siguientes datos que voy a leer y abrir en el Blazor Server App:

Entrada XLSX Hoja ExcelResultado en el navegador del servidor Blazor
NombreApellidoID
JohnApplesmith1
RichardSmith2
SherryRobins3

Empieza creando un proyecto Blazor desde el IDE de Visual Studio:

Elija el tipo de proyecto Blazor Server App:

Ejecute la Aplicación sin cambiar la solución con la tecla F5. Navega a la pestaña Fetch data de la Aplicación así:

Nuestro objetivo será cargar el archivo Excel en la aplicación Blazor con un botón de carga y luego mostrarlo en esta página.

Paso 2: Añada IronXL a su solución

IronXL: Biblioteca .NET Excel (Instrucciones de instalación):

IronXL es una biblioteca .NET que permite tratar la hoja de cálculo de Microsoft Excel como un objeto, lo que permite al desarrollador utilizar toda la potencia de C# y .NET Framework para manipular el flujo de datos. Como desarrollador, queremos una manera agradable a través del cual podemos obtener todas las celdas de fila y la información de la columna del documento de Excel / hoja de cálculo en nuestras aplicaciones o base de datos.

Con IronXL, es posible obtener todo tipo de información de una hoja de cálculo, como valores de celdas, contenido de celdas, imágenes, referencias y formato. IronXL es mejor que NPOI en muchos aspectos. IronXL proporciona más funciones y puede facilitar la escritura de lógica compleja. También tiene licencias más preferibles y el equipo de asistencia es más competente.

IronXL es compatible con las últimas versiones de .NET (8, 7 y 6) y .NET Core Framework 4.6.2+.

Añada IronXL a su solución utilizando uno de los métodos siguientes y, a continuación, cree la solución.

Opción 2A - Utilizar el gestor de paquetes NuGet

Biblioteca NuGet C# para Excel

Instalar con NuGet

Install-Package IronXL.Excel
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Opción 2B - Añadir PackageReference en el archivo csproj

Puedes añadir IronXL directamente a tu proyecto añadiendo la siguiente línea a cualquier <ItemGroup>en el archivo.csproj` de su solución:

<PackageReference Include="IronXL.Excel" Version="*" />
XML

Como se muestra aquí en Visual Studio:

Paso 3 - Codificación de la carga y visualización de archivos

En la vista de solución de Visual Studio, vaya a la carpeta Pages/ y busque el archivo FetchData.razor. Puedes usar cualquier otro archivo razor pero nosotros usaremos este porque viene con la plantilla Blazor Server App Template.

Sustituye el contenido del archivo replace por el siguiente código:

@using IronXL;
@using System.Data;

@page "/fetchdata"

<PageTitle>Excel File Viewer</PageTitle>

<h1>Open Excel File to View</h1>

<InputFile OnChange="@OpenExcelFileFromDisk" />

<table>
    <thead>
        <tr>
            @foreach (DataColumn column in displayDataTable.Columns)
            {
                <th>
                    @column.ColumnName
                </th>
            }
        </tr>
    </thead>
    <tbody>
        @foreach (DataRow row in displayDataTable.Rows)
        {
            <tr>
                @foreach (DataColumn column in displayDataTable.Columns)
                {
                    <td>
                        @row [column.ColumnName].ToString()
                    </td>
                }
            </tr>
        }
    </tbody>
</table>

@code {
    //  Crear una DataTable
    private DataTable displayDataTable = new DataTable();

    //  Cuando se carga un archivo en la aplicación mediante InputFile, disparador:
    async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
    {
        IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";

        //  Abrir el archivo a un objeto MemoryStream
        MemoryStream ms = new MemoryStream();

        await e.File.OpenReadStream().CopyToAsync(ms);
        ms.Position = 0;

        //  Definir variables para IronXL
        WorkBook loadedWorkBook = WorkBook.FromStream(ms);
        WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; //  O utilice .GetWorkSheet()

        //  Añadir columnas de cabecera a la DataTable
        RangeRow headerRow = loadedWorkSheet.GetRow(0);
        for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
        {
            displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
        }

        //  Rellenar la DataTable
        for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
        {
            IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().Select(c => c.ToString());
            displayDataTable.Rows.Add(excelRow.ToArray());
        }
    }
}
@using IronXL;
@using System.Data;

@page "/fetchdata"

<PageTitle>Excel File Viewer</PageTitle>

<h1>Open Excel File to View</h1>

<InputFile OnChange="@OpenExcelFileFromDisk" />

<table>
    <thead>
        <tr>
            @foreach (DataColumn column in displayDataTable.Columns)
            {
                <th>
                    @column.ColumnName
                </th>
            }
        </tr>
    </thead>
    <tbody>
        @foreach (DataRow row in displayDataTable.Rows)
        {
            <tr>
                @foreach (DataColumn column in displayDataTable.Columns)
                {
                    <td>
                        @row [column.ColumnName].ToString()
                    </td>
                }
            </tr>
        }
    </tbody>
</table>

@code {
    //  Crear una DataTable
    private DataTable displayDataTable = new DataTable();

    //  Cuando se carga un archivo en la aplicación mediante InputFile, disparador:
    async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
    {
        IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";

        //  Abrir el archivo a un objeto MemoryStream
        MemoryStream ms = new MemoryStream();

        await e.File.OpenReadStream().CopyToAsync(ms);
        ms.Position = 0;

        //  Definir variables para IronXL
        WorkBook loadedWorkBook = WorkBook.FromStream(ms);
        WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; //  O utilice .GetWorkSheet()

        //  Añadir columnas de cabecera a la DataTable
        RangeRow headerRow = loadedWorkSheet.GetRow(0);
        for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
        {
            displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
        }

        //  Rellenar la DataTable
        for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
        {
            IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().Select(c => c.ToString());
            displayDataTable.Rows.Add(excelRow.ToArray());
        }
    }
}
Private IronXL As [using]
Private System As [using]

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@page "/fetchdata" (Of PageTitle) Excel File Viewer</PageTitle> (Of h1) Open Excel File @to View</h1> <InputFile OnChange="@OpenExcelFileFromDisk" /> (Of table) (Of thead) (Of tr) @foreach(DataColumn column in displayDataTable.Columns)
'			{
'				<th> @column.ColumnName </th>
'			}
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'		</tr> </thead> (Of tbody) @foreach(DataRow row in displayDataTable.Rows)
'		{
'			<tr> @foreach(DataColumn column in displayDataTable.Columns)
'				{
'					<td> @row [column.ColumnName].ToString() </td>
'				}
'			</tr>
'		}
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	</tbody> </table> @code
'	{
'	'  Crear una DataTable
'	private DataTable displayDataTable = New DataTable();
'
'	'  Cuando se carga un archivo en la aplicación mediante InputFile, disparador:
'	async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
'	{
'		IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";
'
'		'  Abrir el archivo a un objeto MemoryStream
'		MemoryStream ms = New MemoryStream();
'
'		await e.File.OpenReadStream().CopyToAsync(ms);
'		ms.Position = 0;
'
'		'  Definir variables para IronXL
'		WorkBook loadedWorkBook = WorkBook.FromStream(ms);
'		WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; '  O utilice .GetWorkSheet()
'
'		'  Añadir columnas de cabecera a la DataTable
'		RangeRow headerRow = loadedWorkSheet.GetRow(0);
'		for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
'		{
'			displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
'		}
'
'		'  Rellenar la DataTable
'		for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
'		{
'			IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().@Select(c => c.ToString());
'			displayDataTable.Rows.Add(excelRow.ToArray());
'		}
'	}
'}
VB   C#

Resumen

El <InputFile>El componente le permitirá cargar un archivo en esta página web. Y hemos establecido el callback del evento invocado para llamar a OpenExcelFileFromDisk que es el método async en el bloque @code en la parte inferior. El HTML mostrará su hoja Excel como una tabla en la pestaña.

IronXL.Excel es solo .NET biblioteca de software para la lectura de una amplia variedad de formatos de hoja de cálculo. No requiere Microsoft Excel y no depende de Interop.


Lecturas complementarias

Ver la referencia de la API

Explore la Referencia de la API para IronXL, que describe los detalles de todas las características, espacios de nombres, clases, métodos, campos y enums de IronXL.

Ver la referencia de la API

Descargar el producto de software.