使用IRONXL

如何在Blazor中导出到CSV

更新 2024年三月31日
分享:

今天,我们将深入探讨如何使用 Blazor 和 IronXL 将 Excel 文件转换为 CSV 格式。 通过本教程结束时,您将能够创建一个基本的Blazor应用程序,该应用程序可以以包括CSV在内的各种格式导出Excel数据。

IronXL 简介

IronXL 是一个功能强大的.NET Excel 库设计用于在多种格式开发人员可以使用 XLS、XLSX、XLSM、XLTX 和 CSV。它允许开发人员以编程方式读写和处理 Excel 数据,而无需使用 Microsoft Office 或 Excel Interop。

使用 IronXL,您可以创建、加载和保存Excel 工作簿此外,译文还必须包含以下内容:.NET、Java、Python 或 Node js。 它还支持以下高级功能格式化, 公式, 图表例如,.NET、Java、Python 或 Node js。 IronXL 与各种 .NET Framework 兼容,可用于 C# 和 VB.NET 等流行语言。

将 Excel 文件转换为 CSV 的步骤

设置您的 Blazor 项目

要开始工作,您需要创建一个新的 Blazor Server 项目。 打开 Visual Studio,创建一个新项目并选择 "Blazor Server App "模板。 为您的项目命名,然后点击 "创建"。

项目创建后,打开页面文件夹,找到Index.razor文件。在这里添加 Blazor 组件并进行编码,以处理文件上传和转换。

安装 IronXL

在开始编写代码之前,有必要安装 IronXL 库。 在 Visual Studio 中打开软件包管理器控制台,运行以下命令:

Install-Package IronXL.Excel

此命令将在 Blazor 项目中安装 IronXL 库。 现在您可以开始编写代码了!

创建文件上传组件

首先,创建一个基本的文件上传组件,允许用户上传现有的 Excel 文件。然后,从 "Microsoft.AspNetCore.Components.Forms "命名空间中添加 "InputFile "组件。 在Index.razor文件的"@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#

这段代码设置了文件上传组件,包括一个按钮和一个显示文件转换状态的消息区。 输入文件 "组件上的 "接受 "属性指定了可接受的文件格式。

编写文件转换代码

现在,让我们来编写处理文件上传和转换的代码。 将结合使用 IronXL、Blazor 和 C# 来完成这项任务。 您可以使用 IronXL 进行以下工作将 CSV 转换为 Excel 文件.

将以下代码添加到您的 Index.razor 文件中,位于您之前添加的 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}";
        }
    }
}
@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
VB   C#

这段代码定义了一个名为 "OnInputFileChange "的私有方法,该方法将在使用 "InputFile "组件上传 Excel 电子表格时触发; Excel 可以是 XLS 或 XLSX 格式。 代码会读取上传的基本 Excel 文件,并将其加载到一个工作簿对象,然后将 "WorkBook "保存为 CSV 文件。转换的状态会显示在页面的消息区。

代码分解

首先,查看完整的代码:

@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
VB   C#

让我们进一步分解代码:

  1. 上传文件时,会触发 OnInputFileChange 方法,并向其传递一个 InputFileChangeEventArgs 对象。 该对象包含上传文件的相关信息,如文件名和大小。

  2. 将原始文件名存储在名为 originalFileName 的变量中,以便在页面上显示。

  3. 在 try-catch 块中,创建一个新的 MemoryStream 对象来读取上传文件的内容。 using 语句确保内存流在不再需要时得到妥善处理。

  4. 使用 await 关键字异步将上传文件的内容复制到内存流中。 这样才能确保该应用程序在阅读文件时保持响应速度。

  5. 接下来是工作簿载入该方法用于将内存流的内容加载到 "WorkBook "对象中。 该对象表示整个 Excel 工作簿,包括工作表、单元格和数据。

  6. 然后为转换后的 CSV 文件指定一个输出文件名。在本例中,我们使用的文件名是 "sample.csv"。

  7. "(《世界人权宣言》)保存为 Csv然后使用 WorkBook 对象的方法将工作簿保存为 CSV 文件,并指定输出文件名。

  8. 如果转换成功,则会显示一条信息,说明转换已经完成。 如果出现错误,请捕捉异常并显示错误信息。

测试应用程序

现在 Blazor 应用程序已经完成,是时候进行测试了! 按 F5 在 Visual Studio 中运行应用程序。 应用程序运行后,您应该会在页面上看到一个文件上传按钮。

如何在 Blazor 中导出为 CSV,图 1:运行 Blazor 应用程序

运行 Blazor 应用程序

单击按钮,选择要上传的 Excel 文件。 输入文件 "组件的接受属性中列出了可接受的文件格式。

如何在 Blazor 中导出为 CSV,图 2:选择 Excel 文件

选择一个 Excel 文件

选择文件后,应用程序将读取文件,使用 IronXL 将其转换为 CSV 格式,并以指定的输出文件名保存转换后的文件。 您将看到一条显示转换状态以及原始文件名的信息。

如何在 Blazor 中导出为 CSV,图 3:转换状态

转换状态

祝贺! 您已经成功构建了一个 Blazor 应用程序,可以使用 IronXL 将 Excel 文件导出为 CSV 格式。 下面的截图显示了上述程序的输出结果。

如何在 Blazor 中导出为 CSV,图 4:输出的 Excel 文件

输出 Excel 文件

结论

本教程演示了如何使用 IronXL.Excel 构建一个可将 Excel 文件导出为 CSV 格式的 Blazor 应用程序。 我们已经演示了如何创建文件上传组件、处理文件上传以及使用 IronXL.Excel 的强大功能将 Excel 文件转换为 CSV 格式。

通过将 IronXL 融入 Blazor 应用程序,您可以轻松处理各种 Excel 相关任务,如导入、操作和导出数据。 这将为您的项目带来广泛的可能性,并帮助您为用户提供更丰富的体验。 你可以将 CSV 转换为 Excel在 Blazor 中使用 IronXL 库。

IronXL 提供了一个免费试用此外,译文还应让您在购买前测试其特性和功能。 试用期过后,IronXL 的许可证起价为 $749。

< 前一页
如何在C#中将Excel转换为Datagridview
下一步 >
如何在C#中将Excel转换为数据表

准备开始了吗? 版本: 2024.11 刚刚发布

免费NuGet下载 总下载量: 1,111,773 查看许可证 >