IRONXLの使用

BlazorでCSVにエクスポートする方法

更新済み 2024年3月31日
共有:

今日は、BlazorとIronXLを使用してExcelファイルをCSV形式に変換する方法について説明します。 このチュートリアルの終わりまでには、ExcelデータをCSVなど様々な形式でエクスポートする基本的なBlazorアプリケーションを作成できるようになります。

IronXLの紹介

IronXLは強力な.NET ExcelライブラリExcelファイルと互換性を持つように設計されています幅広いフォーマット、XLS、XLSX、XLSM、XLTX、CSVを含みます。これにより、開発者はMicrosoft OfficeまたはExcel Interopを必要とせずに、プログラムによってExcelデータを読み取り、書き込み、操作することができます。

IronXLを使用すると、Excelファイルを作成、読み込み、保存できます。Excelワークブック個々のセルまたは範囲にデータを読み書きすることもできます。 また、高度な機能もサポートしており、フォーマット, 数式, グラフ、およびピボットテーブル。 IronXLはさまざまな.NETフレームワークと互換性があり、C#やVB.NETのような人気の言語で使用できます。

ExcelファイルをCSVに変換する手順

Blazorプロジェクトの設定

まず、Blazor Serverプロジェクトを新規作成する必要があります。 Visual Studioを開き、新しいプロジェクトを作成し、「Blazor Server App」テンプレートを選択してください。 プロジェクトに名前を付け、「作成」をクリックしてください。

プロジェクトが作成されたら、Pages フォルダーを開き、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#

このコードは、ファイルアップロードコンポーネントを設定し、ボタンとファイル変換のステータスを表示するメッセージ領域を含んでいます。 InputFileコンポーネントのaccept属性は、受け入れるファイル形式を指定します。

ファイル変換コードの記述

それでは、ファイルのアップロードと変換を処理するコードを書きましょう。 このタスクを達成するために、IronXL、Blazor、及びC#の組み合わせが使用されます。 IronXLを使用してCSVファイルをExcelファイルに変換する.

以下のコードを以前追加した div 要素の下に Index.razor ファイルに追加してください。

@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オブジェクトを取得し、その後 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.Loadメソッドは、メモリ ストリームの内容を WorkBook オブジェクトに読み込むために使用されます。 このオブジェクトは、シート、セル、データを含むExcelワークブック全体を表します。

  6. 次に、変換されたCSVファイルの出力ファイル名を指定します。この場合、名前は「sample.csv」を使用します。

  7. についてSaveAsCsv(CSVとして保存)WorkBookオブジェクトのメソッドは、指定された出力ファイル名でワークブックをCSVファイルとして保存するために使用されます。

  8. 変換が成功した場合、変換が完了したことを示すメッセージが表示されます。 エラーが発生した場合は、例外をキャッチしてエラーメッセージを表示します。

アプリケーションのテスト

Blazorアプリケーションが完成したので、テストする時が来ました。! Visual Studioでアプリケーションを実行するにはF5キーを押してください。 アプリケーションが実行されたら、ページにファイルアップロードボタンが表示されるはずです。

BlazorでCSVにエクスポートする方法、図1:Blazorアプリケーションを実行する

Blazorアプリケーションを実行する

ボタンをクリックして、アップロードするExcelファイルを選択してください。 受け入れ可能なファイル形式は InputFile コンポーネントの accept 属性にリストされています。

BlazorでCSVにエクスポートする方法、図2: Excelファイルを選択

Excelファイルを選択してください

ファイルを選択した後、アプリケーションはそのファイルを読み取り、IronXL を使用して CSV 形式に変換し、指定された出力ファイル名で変換されたファイルを保存します。 変換の状態および元のファイル名を示すメッセージが表示されるはずです。

BlazorでCSVエクスポートする方法、図3:変換状態

変換ステータス

おめでとうございます! BlazorアプリケーションをIronXLを使用してExcelファイルをCSV形式でエクスポートできるように正常に構築しました。 以下のスクリーンショットは、上記プログラムの出力を示しています。

BlazorでCSVにエクスポートする方法、図4: 出力されたExcelファイル

出力Excelファイル

結論

このチュートリアルでは、IronXL を使用して Excel ファイルを CSV 形式にエクスポートできる Blazor アプリケーションを構築する方法を示しました。 以下は、IronXLの強力な機能を使って、ファイルアップロードコンポーネントの作成、ファイルのアップロード処理、およびExcelファイルをCSV形式に変換する方法を示したものです。

IronXLをBlazorアプリケーションに組み込むことで、データのインポート、操作、エクスポートなど、さまざまなExcel関連のタスクを簡単に処理できます。 これは、プロジェクトに幅広い可能性をもたらし、ユーザーにより充実した体験を提供するのに役立ちます。 Here is the translation of the provided text into Japanese:

あなたはCSVをExcelに変換IronXLライブラリを使用してBlazorにおいて。

IronXLは、無料試用購入を決定する前に、その機能および能力をテストできるようにするためです。 試用期間終了後、IronXLのライセンスは$749から始まります。

< 以前
C#でExcelをDatagridviewに変換する方法
次へ >
C#でExcelをデータテーブルに変換する方法