.NET Core用 Excel API の構築: XLSX ファイルの作成、読み取り、エクスポート
IronXLを使えば、.NET Core用のExcel APIを簡単に構築できます。 パッケージをインストールし、WorkBookを作成し、セルに入力し、ストリームを直接返します。
Install-Package IronXL.Excel
IronXLは、XLSXファイルの作成、データのインポート、複数フォーマットのエクスポート、セルのスタイル設定をすべてマネージド.NETコードで処理します。 Windows、Linux、macOSで動作するため、プログラムによるExcelサポートを必要とするあらゆるASP.NET Core APIにとって実用的な選択肢となります。
.NET CoreプロジェクトにIronXLをインストールするにはどうすればよいですか?
NuGetパッケージマネージャーコンソールを使用して、任意の.NET 10プロジェクトにIronXLを追加します。
Install-Package IronXL.Excel
または、Visual Studio NuGet UI でIronXLを検索してインストールすることもできます。 NuGetのパッケージ名は@@--CODE-42871--@ です。
インストール後、ワークブックを作成または読み込むファイルにusing IronXL;を追加してください。 ホストマシンには、Office相互運用ライブラリ、COM登録、Microsoft Excelのインストールは一切不要です。IronXLは完全に自己完結型です。
IronXLは.NET Standard 2.0以降を対象としているため、同じライブラリが.NET Core、 .NET 5/6/7/8/9/10、および.NET Frameworkプロジェクトで動作します。 IronXLのドキュメントには、サポートされているすべての環境について詳細に記載されています。
.NET Coreでプログラムを使ってExcelファイルを作成する方法を教えてください。
IronXLの直感的なAPIを使えば、わずか数行のコードでExcelドキュメントをゼロから作成できます。 このライブラリは、洗練されたオブジェクトモデルを通じて、ワークブック、ワークシート、セルスタイル、および数式を完全に制御できます。
以下は、書式設定されたデータを含む新しい Excel ワークブックを作成し、ワークシート管理のデモンストレーションを行い、セル スタイルを適用するコントローラー アクションです。
using IronXL;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
[HttpGet("create-report")]
public IActionResult CreateSalesReport()
{
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");
// Set header labels in the first row
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Q1 Sales";
worksheet["C1"].Value = "Q2 Sales";
worksheet["D1"].Value = "Total";
// Bold headers and apply a blue background with white text
worksheet["A1:D1"].Style.Font.Bold = true;
worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");
// Add data rows
worksheet["A2"].Value = "Widget Pro";
worksheet["B2"].Value = 15000;
worksheet["C2"].Value = 18500;
worksheet["D2"].Formula = "=B2+C2";
worksheet["A3"].Value = "Gadget Plus";
worksheet["B3"].Value = 22000;
worksheet["C3"].Value = 24000;
worksheet["D3"].Formula = "=B3+C3";
// Apply currency number format to sales columns
worksheet["B2:D3"].Style.Format = "$#,##0";
// Stream the XLSX file back to the caller
var stream = workbook.ToStream();
return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx");
}
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
[HttpGet("create-report")]
public IActionResult CreateSalesReport()
{
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");
// Set header labels in the first row
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Q1 Sales";
worksheet["C1"].Value = "Q2 Sales";
worksheet["D1"].Value = "Total";
// Bold headers and apply a blue background with white text
worksheet["A1:D1"].Style.Font.Bold = true;
worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");
// Add data rows
worksheet["A2"].Value = "Widget Pro";
worksheet["B2"].Value = 15000;
worksheet["C2"].Value = 18500;
worksheet["D2"].Formula = "=B2+C2";
worksheet["A3"].Value = "Gadget Plus";
worksheet["B3"].Value = 22000;
worksheet["C3"].Value = 24000;
worksheet["D3"].Formula = "=B3+C3";
// Apply currency number format to sales columns
worksheet["B2:D3"].Style.Format = "$#,##0";
// Stream the XLSX file back to the caller
var stream = workbook.ToStream();
return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx");
}
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/[controller]")>
Public Class ExcelController
Inherits ControllerBase
<HttpGet("create-report")>
Public Function CreateSalesReport() As IActionResult
' Create a new Excel workbook in XLSX format
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Sales Data")
' Set header labels in the first row
worksheet("A1").Value = "Product"
worksheet("B1").Value = "Q1 Sales"
worksheet("C1").Value = "Q2 Sales"
worksheet("D1").Value = "Total"
' Bold headers and apply a blue background with white text
worksheet("A1:D1").Style.Font.Bold = True
worksheet("A1:D1").Style.SetBackgroundColor("#4472C4")
worksheet("A1:D1").Style.Font.SetColor("#FFFFFF")
' Add data rows
worksheet("A2").Value = "Widget Pro"
worksheet("B2").Value = 15000
worksheet("C2").Value = 18500
worksheet("D2").Formula = "=B2+C2"
worksheet("A3").Value = "Gadget Plus"
worksheet("B3").Value = 22000
worksheet("C3").Value = 24000
worksheet("D3").Formula = "=B3+C3"
' Apply currency number format to sales columns
worksheet("B2:D3").Style.Format = "$#,##0"
' Stream the XLSX file back to the caller
Dim stream = workbook.ToStream()
Return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx")
End Function
End Class
出力Excelファイル
Build an Excel API for .NET Core:XLSXファイルの作成、読み取り、エクスポート:画像1 - .NET Core APIによって生成されたExcelファイル。
XLSX形式とXLS形式の両方をサポートしています。 CODE-42874--@@@メソッドは、セルに値を入力し、計算のためにExcelの数式を適用し、セル範囲を通してレイアウトを制御する名前付きシートを追加します。 IronXLの計算エンジンは、ワークブックのデータが変更されると数式を自動的に評価します。これには、より複雑なデータ分析シナリオで使用される配列数式のサポートも含まれます。
セルスタイルは、大胆さや色使いだけにとどまらない。 セル書式設定APIを使用すると、COMレイヤーに触れることなく、数値形式、罫線、配置、フォントサイズなどを設定できます。 これにより、ディスプレイコンテキストが存在しないコンテナ化されたLinux環境内でも安全に実行できます。
ワークブックに複数のワークシートを追加するにはどうすればよいですか?
1つのワークブックには、任意の数のワークシートを含めることができます。 必要な各タブについて、workbook.CreateWorkSheet("SheetName")@にお電話ください。 ワークシートには、後で名前からworkbook.GetWorkSheet("SheetName")、または索引からworkbook.WorkSheets[0]でアクセスできます。
このパターンは、概要と詳細の両方を含むレポートを作成する際に便利です。1つのシートに集計合計値が格納され、子シートには取引の生データが格納されます。 ワークシート管理に関するドキュメントでは、実行時にシートの名前変更、並べ替え、および削除を行う手順を説明しています。
Web APIでExcelデータを読み込む最適な方法は何ですか?
ユーザーがアップロードしたExcelファイルからデータをインポートすることは、スプレッドシートコンテンツを処理するあらゆるWebアプリケーションにとって不可欠です。 IronXLを使えば、Excelスプレッドシートを直接読み込むことができます。ストリームから読み込み、行を反復処理し、各セルから入力された値を取り出すことができます。
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file uploaded");
using var stream = file.OpenReadStream();
// Load the workbook directly from the upload stream
WorkBook workbook = WorkBook.Load(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;
var records = new List<Dictionary<string, object>>();
// Start at row 2 to skip the header row
for (int row = 2; row <= worksheet.RowCount; row++)
{
var record = new Dictionary<string, object>
{
["Product"] = worksheet[$"A{row}"].StringValue,
["Sales"] = worksheet[$"B{row}"].DecimalValue,
["Date"] = worksheet[$"C{row}"].DateTimeValue
};
records.Add(record);
}
return Ok(new {
message = "Import successful",
recordCount = records.Count,
data = records
});
}
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file uploaded");
using var stream = file.OpenReadStream();
// Load the workbook directly from the upload stream
WorkBook workbook = WorkBook.Load(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;
var records = new List<Dictionary<string, object>>();
// Start at row 2 to skip the header row
for (int row = 2; row <= worksheet.RowCount; row++)
{
var record = new Dictionary<string, object>
{
["Product"] = worksheet[$"A{row}"].StringValue,
["Sales"] = worksheet[$"B{row}"].DecimalValue,
["Date"] = worksheet[$"C{row}"].DateTimeValue
};
records.Add(record);
}
return Ok(new {
message = "Import successful",
recordCount = records.Count,
data = records
});
}
Imports Microsoft.AspNetCore.Mvc
Imports System.Collections.Generic
Imports IronXL
<HttpPost("import")>
Public Function ImportExcelData(file As IFormFile) As IActionResult
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No file uploaded")
End If
Using stream = file.OpenReadStream()
' Load the workbook directly from the upload stream
Dim workbook As WorkBook = WorkBook.Load(stream)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim records As New List(Of Dictionary(Of String, Object))()
' Start at row 2 to skip the header row
For row As Integer = 2 To worksheet.RowCount
Dim record As New Dictionary(Of String, Object) From {
{"Product", worksheet($"A{row}").StringValue},
{"Sales", worksheet($"B{row}").DecimalValue},
{"Date", worksheet($"C{row}").DateTimeValue}
}
records.Add(record)
Next
Return Ok(New With {
.message = "Import successful",
.recordCount = records.Count,
.data = records
})
End Using
End Function
出力
Build an Excel API for .NET Core:XLSXファイルの作成、読み込み、エクスポート:画像2 - 正常にインポートされたExcelデータを示す出力。
CODE-42878--ストリーム、ファイルパス、またはバイト配列からExcelファイルを開きます。 セルへのアクセスは、worksheet["A1"] インデクサ構文、または名前付きセル範囲を反復することによって行います。 IronXLはデータバリデーションを自動的に処理し、型安全なアクセサを公開します --@--CODE-42880--@@, @--CODE-42881--@, @--CODE-42882--@, @--CODE-42883--@ -- そのため、使用するコードはクリーンで予測可能なままです。
インポートしたデータのフィルタリングと並べ替えはどのように行いますか?
ワークブックをロードした後、.SortAscending()または.SortDescending()を任意のRangeオブジェクト上で呼び出し、行を並べ替えます。 フィルタリングを行うには、セルを反復処理して条件をインラインで評価するか、データをLINQコレクションに転送してさらに処理します。 並べ替えとフィルタリングのガイドでは、両方のアプローチを具体的な例を用いて解説しています。
大容量ファイルのアップロードに対応していますか? IronXLはアクセスされたセルのみを読み込むため、特定の列を照会する前に数メガバイトのファイル全体をメモリに読み込む必要はありません。 この遅延アクセス方式により、数万行のデータを含むワークブックを処理する場合でも、メモリ使用量を安定させることができます。
Excelデータをさまざまな形式にエクスポートするにはどうすればよいですか?
アプリケーションは、スプレッドシートを複数の出力形式で提供する必要がある場合が多い。 IronXLは、外部変換ツールを必要とせず、単一のメソッド呼び出しでXLSX、XLS、CSV、JSON、およびHTMLへのエクスポートをサポートしています。
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
// Load a pre-designed template workbook
WorkBook workbook = WorkBook.Load("template.xlsx");
return format.ToLower() switch
{
"xlsx" => File(
workbook.ToStream(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"export.xlsx"),
"csv" => File(
workbook.ToStream(FileFormat.CSV),
"text/csv",
"export.csv"),
"json" => Ok(workbook.ToJson()),
_ => BadRequest("Unsupported format")
};
}
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
// Load a pre-designed template workbook
WorkBook workbook = WorkBook.Load("template.xlsx");
return format.ToLower() switch
{
"xlsx" => File(
workbook.ToStream(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"export.xlsx"),
"csv" => File(
workbook.ToStream(FileFormat.CSV),
"text/csv",
"export.csv"),
"json" => Ok(workbook.ToJson()),
_ => BadRequest("Unsupported format")
};
}
Imports Microsoft.AspNetCore.Mvc
<HttpGet("export/{format}")>
Public Function ExportData(format As String) As IActionResult
' Load a pre-designed template workbook
Dim workbook As WorkBook = WorkBook.Load("template.xlsx")
Select Case format.ToLower()
Case "xlsx"
Return File(workbook.ToStream(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "export.xlsx")
Case "csv"
Return File(workbook.ToStream(FileFormat.CSV), "text/csv", "export.csv")
Case "json"
Return Ok(workbook.ToJson())
Case Else
Return BadRequest("Unsupported format")
End Select
End Function
あらかじめレイアウトが定義されたExcelテンプレートを使用すると、レポート作成が迅速化されます。 あらかじめデザインされたワークブックを読み込み、動的なデータを名前付きセルまたは範囲に入力し、その結果をストリーミング配信します。 この方法は、柔軟性よりも一貫した書式が重要な売上報告書、請求書、コンプライアンス文書などに適しています。
IronXLはクロスプラットフォームに対応しているため、これらのファイル操作はWindows、Linux、macOSのいずれのプラットフォームでも同じように動作し、 .NET Coreのコンテナ化されたデプロイメントに適しています。 IronXLのクロスプラットフォームガイドで詳細をご覧ください。
.NET Core API から CSV 形式でエクスポートするにはどうすればよいですか?
上記のように、workbook.ToStream(FileFormat.CSV)を呼び出し、text/csvコンテンツ・タイプで返してください。 複数シートのワークブックの場合、workbook.WorkSheets[index]にアクセスし、シート・オブジェクト上で.ToStream(FileFormat.CSV)を呼び出すことで、各シートを個別にエクスポートできます。 CSVエクスポートに関するドキュメントでは、区切り文字、エンコード、日付形式オプションの取り扱いについて説明しています。
条件付き書式とデータバーはどのように適用するのですか?
IronXLは、基本的なセルスタイルに加えて、条件付き書式設定ルールをサポートしています。例えば、しきい値を超えるセルを緑色で強調表示したり、負の値を赤色で表示したり、グラデーションデータバーを適用して、別のツールで後処理を行うことなく、スプレッドシート上で傾向を即座に視覚化できます。
条件付き書式設定は、読者が異常値を一目で把握する必要がある財務ダッシュボードやKPIレポートにおいて特に有効です。 ダウンロード後に受信者が独自の書式設定を適用するのではなく、書式設定ルールはXLSXファイルに埋め込まれた状態で送信され、Microsoft Excelのどのバージョンでも、または互換性のあるビューアでファイルが開かれると自動的に評価されます。
条件付き書式は、ワークシートのConditionalFormattingプロパティを通して設定されます。 ルールは指定されたセル範囲に適用され、セル値の比較、数式に基づくルール、値を低から高まで段階的に表示するカラースケール、セル内棒グラフのように機能するデータバーオーバーレイなど、複数の条件タイプをサポートします。 Open XML仕様は、 IronXLがXLSXファイルに書き込む際の基本的なルール構造を定義しています。
カラー スケール、アイコン セット、データ バーの適用方法に関する詳細なリファレンスについては、 IronXLドキュメントの条件付き書式設定チュートリアルを参照してください。
Excelファイルとワークシートを保護するにはどうすればよいですか?
機密データを含むレポートを配布するには、アクセス制御の仕組みが必要となる。 IronXLは、ワークブックレベルのパスワード保護とワークシートレベルの保護の両方をサポートしています。
- ワークブックのパスワード: XLSXファイルを暗号化するために、
.SaveAs()を呼び出す前に、workbook.Password = "secret"を設定してください。受信者はExcelで開くためにパスワードを入力する必要があります。 - ワークシート保護:コード-42894--@@を呼び出して、シートの表示を許可しながらセルの編集をロックします。 特定の範囲は、
AllowEditRangeAPIを使用して、データ入力のためにロックを解除することができます。 -読み取り専用配布:絶対に編集してはいけない文書については、ワークシート保護とファイルレベルの暗号化を組み合わせます。
パスワードで保護されたXLSXファイルは、デフォルトでAES-128暗号化を使用します。これは、Excelが標準で採用している暗号化方式と同じです。 つまり、 IronXLで保護されたファイルは、Excelに組み込まれているファイルを開くプロンプトと完全に互換性があり、受信側で特別なビューアは必要ありません。
これらのセキュリティ機能は、標準の.NET Coreセキュリティモデルを補完するものであり、特に財務や人事関連のレポートエンドポイントを構築する際に役立ちます。 ファイル保護に関するドキュメントには、完全なAPIリファレンスが記載されています。
.NETでExcelの数式を扱うにはどうすればよいですか?
IronXLの組み込み計算エンジンは標準的なExcelの数式を実行時に評価するため、APIはディスクに保存してExcelで開き直すことなく計算値を返すことができます。任意のセルの.Formula@プロパティに数式文字列を割り当てます:
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";
// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";
// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";
// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";
// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
' Sum a column and place the result in a footer row
worksheet($"B{lastRow}").Formula = $"=SUM(B2:B{lastRow - 1})"
' Calculate an average across a range
worksheet($"C{lastRow}").Formula = $"=AVERAGE(C2:C{lastRow - 1})"
' Retrieve the computed value immediately
Dim total As Decimal = worksheet($"B{lastRow}").DecimalValue
IronXLは、数学、統計、テキスト、日付、検索などのカテゴリを含む、ほとんどの標準的なExcel関数をサポートしています。 高度なシナリオのために、配列式(@--CODE-42897--@@セマンティクス)もサポートしています。 数式の評価は.NETプロセス内で行われるため、外部の計算サービスへの往復通信は発生しません。数式が割り当てられるとすぐに結果が得られるため、数千行にわたる計算の場合でもAPIの応答時間を予測可能なものにすることができます。 数式サポートリファレンスには、サポートされているすべての関数が一覧表示されています。
次のステップは何ですか?
IronXLを使用してExcel APIを構築することで、 .NET Coreアプリケーションはスプレッドシートを操作するための確かな機能を備えることができます。 IronXLは、書式設定されたデータと計算式を含むXLSXファイルの作成から、ユーザーアップロードのインポート、複数の形式でのデータエクスポートまで、プログラムによるスプレッドシート操作のあらゆる側面を、クロスプラットフォームかつOffice不要の方法で処理します。
さらに詳しく知るには、次のリソースを参照してください。
- IronXL製品ページ- 機能概要と入門ガイド
- IronXLドキュメント-- 完全なAPIリファレンスとハウツー記事
- C# で Excel ファイルを作成する-- ワークブックとワークシートの作成に関する詳細なチュートリアル
- C#でExcelファイルを読み込む-- データの読み込み、解析、抽出
- Excel を CSV にエクスポート-- エンコードと区切り文字オプションを使用した CSV エクスポート -セル書式設定API -- フォント、色、罫線、数値形式 条件付き書式設定(ルール、データバー、カラースケールなど) -数式サポート-- サポートされている Excel 関数のリファレンス -ファイル保護-- ワークブックとワークシートのパスワードAPI
- NuGetパッケージ-- 現在のリリースとバージョン履歴
無料トライアルを開始して、実際のプロジェクトでIronXLをテストするか、ライセンスオプションを確認して、本番環境への導入に最適なプランを見つけてください。
よくある質問
IronXLとは何ですか?
IronXL は、開発者が Microsoft Office や COM 相互運用性を必要とせずに C# でプログラム的に Excel ファイルを作成、読み取り、エクスポートできるようにする.NET Excel ライブラリです。
Office なしで.NET Coreで Excel ファイルを作成するにはどうすればよいですか?
WorkBook.Create(ExcelFileFormat.XLSX) を呼び出して新しいブックを作成し、CreateWorkSheet() を使用してシートを追加し、worksheet['A1'].Value 構文を使用してセルにデータを入力し、workbook.ToStream() を使用して結果をストリーミングします。
ASP.NET Coreでアップロードされた Excel ファイルを読み取るにはどうすればよいでしょうか?
IFormFileストリームをWorkBook.Load(stream)に渡し、DefaultWorkSheetにアクセスし、worksheet.RowCountを使用して行を反復処理します。DecimalValueやDateTimeValueなどの型指定されたアクセサーは、各セルから厳密に型指定されたデータを抽出します。
IronXL はExcel データを CSV または JSON にエクスポートできますか?
はい。CSV 出力の場合は workbook.ToStream(FileFormat.CSV) を呼び出し、ワークブック データの JSON 表現の場合は workbook.ToJson() を呼び出します。
IronXL はLinux および macOS で動作しますか?
はい。IronXLは.NET Standard 2.0 以上を対象としており、Microsoft Office のインストールや COM レイヤーなしで Windows、Linux、macOS 上で実行されます。
IronXLで Excel ファイルをパスワード保護するにはどうすればよいですか?
SaveAs() を呼び出す前に、workbook.Password に文字列を設定してください。ワークシートレベルの保護を行うには、worksheet.ProtectSheet('password') を呼び出して、シートの読み取りを許可しながらセルの編集を禁止します。



