C#でExcelファイルを読むためのベストな方法 | IronXLステップバイステップガイド
C#でExcelファイルを読み込むことは、 .NET開発者にとってよくある課題です。 データインポートパイプライン、レポート作成ツール、バッチ処理システムなど、どのようなシステムを構築する場合でも、スプレッドシートデータを適切に解析することは重要です。 IronXLは、サーバー側にMicrosoft OfficeやCOM相互運用機能を必要とせずに、XLSX、XLS、CSVファイルを処理できる.NETライブラリです。 このガイドでは、インストールから高度なクエリまで、ワークフロー全体を順を追って説明しますので、プロジェクトに最適なアプローチを選択できます。
C#でExcelファイルを読み込む最良の方法は何ですか?
最適な方法は、 IronXLのようなOfficeに依存しない専用ライブラリを使用することです。 Microsoft.Office.Interop.Excelのような従来の方法は、Excelがインストールされているマシンでは動作しますが、バックグラウンドでCOMプロセスを起動するため、サーバー環境やコンテナ環境では不安定です。 OpenXML SDKは無料でサーバーセーフですが、低レベルのXMLモデルを公開しているため、日常的なタスクにはかなりの定型コードが必要になります。
IronXLは、これら両極端の中間に位置する。 このAPIは、開発者がスプレッドシートについて既に考えている方法を反映しています。つまり、ワークブックにはワークシートが含まれ、ワークシートにはセルが含まれ、セルには入力された値が格納されます。 このライブラリは、フォーマット検出、数式評価、エンコードを内部的に処理するため、詳細な解析に時間を費やすことなく、ビジネスロジックの開発に集中できます。
| アプローチ | Officeが必要ですか? | サーバーは安全ですか? | APIの簡素化 | フォーマットサポート |
|---|---|---|---|---|
| COM相互接続 | はい | なし | 低い | XLSX、XLS |
| OpenXML SDK | なし | はい | 低い | XLSXのみ |
| IronXL | なし | はい | 高い | XLSX、XLS、CSV |
IronXL Excelのドキュメントには、 APIの全範囲が網羅されています。 現時点では、以下のセクションでは、すべてのプロジェクトで使用するコアパターンを示します。
.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?
NuGetパッケージマネージャーを使用すれば、インストールは1分もかかりません。 プロジェクトディレクトリでターミナルを開き、以下を実行します。
dotnet add package IronXL.Excel
dotnet add package IronXL.Excel
あるいは、Visual Studio パッケージ マネージャー コンソールを使用します。
Install-Package IronXL.Excel
Install-Package IronXL.Excel
インストール後、スプレッドシートへのアクセスが必要なすべてのファイルに、using IronXL; ディレクティブを追加してください。 このライブラリは、.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2、および.NET Standard 2.0を対象としているため、ランタイムをアップグレードすることなく既存のプロジェクトに組み込むことができます。プラットフォーム固有の注意事項とNuGetパッケージの詳細については、 IronXLのインストールガイドを参照してください。
追加のランタイムコンポーネント、レジストリエントリ、またはOfficeライセンスは必要ありません。 NuGetパッケージには、ライブラリに必要なすべてのものが同梱されています。
インストールの確認
パッケージを追加した後、プロジェクトを一度ビルドして、参照が正しく解決されることを確認してください。 CS0246 エラーが IronXL 型で表示される場合は、using IronXL; ディレクティブが存在すること、および .csproj のターゲット フレームワークがサポートされているバージョンのいずれかであることを確認してください。 IronXLの互換性マトリックスには、確認済みのすべてのランタイムターゲットが一覧表示されています。
Excelワークブックを読み込んで表示するにはどうすればよいですか?
ワークブックを読み込むには、メソッド呼び出しを1回行うだけで済みます。 WorkBook.Load はファイルパスを受け取り、メモリ内のファイル全体を表すオブジェクトを返します。
using IronXL;
// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];
// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
using IronXL;
// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];
// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
Imports IronXL
' Load any supported format -- XLSX, XLS, or CSV
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
' Access the first worksheet by position
Dim worksheet As WorkSheet = workbook.WorkSheets(0)
' Or retrieve a named worksheet
Dim expenses As WorkSheet = workbook.GetWorkSheet("Expenses")
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}")
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}")

WorkBook オブジェクトは、すべてのワークシートデータへのアクセスを保持します。 各 WorkSheet インスタンスは、ファイル内のタブに対応します。インデックス (WorkSheets[0]) によるアクセスは、単一シートのファイルでは信頼性があります。 ファイルに既知の名前のタブが複数含まれている場合、名前によるアクセスの方が安全です。
IronXLは、セルを読み込む際に数式を自動的に評価します。 セル B10 に =SUM(B2:B9) が含まれている場合、sheet["B10"].DecimalValue を読み取ると、計算された合計が返され、数式文字列は返されません。 ワークブックの読み込みオプションの詳細については、 "スプレッドシートの読み込み方法"ガイドを参照してください。
複数のワークシートの操作
ワークブックに複数のタブが含まれている場合、workbook.WorkSheets を使用してタブを列挙し、それぞれを順番に処理できます。 これは、月、部署、地域ごとにデータを分割し、別々のタブに表示するファイルに役立ちます。 WorkSheet.Name プロパティは、タブのラベルを文字列として取得します。これは、条件付き処理やログ記録に使用できます。
ワークシートからセル値を読み取るにはどうすればよいですか?
IronXLは各セルに厳密に型指定されたプロパティを提供するため、手動で解析することなく、値を正しい.NET型に直接読み込むことができます。
using IronXL;
WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
bool inStock = sheet["D2"].BoolValue;
// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
Console.WriteLine($"Status: {statusCell.StringValue}");
}
// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
using IronXL;
WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
bool inStock = sheet["D2"].BoolValue;
// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
Console.WriteLine($"Status: {statusCell.StringValue}");
}
// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("Products.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Address-based access with typed properties
Dim productName As String = sheet("A2").StringValue
Dim quantity As Integer = sheet("B2").IntValue
Dim price As Decimal = sheet("C2").DecimalValue
Dim inStock As Boolean = sheet("D2").BoolValue
' Check for empty cells before processing
Dim statusCell = sheet("E2")
If statusCell.Value IsNot Nothing AndAlso statusCell.StringValue.Length > 0 Then
Console.WriteLine($"Status: {statusCell.StringValue}")
End If
' Row/column index access (zero-based)
Dim firstDataCell = sheet.Rows(1).Columns(0)
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}")

sheet["A2"] 構文は、標準の Excel 表記法を使用します。 列の文字は大文字と小文字を区別せず、行番号は1から始まります。これはExcelのセル番号の表記方法と一致しています。 セル値の読み取りに関するドキュメントには、日付としてフォーマットされたセル用の DateTimeValue を含む追加の型付きアクセサーが示されています。
セルにテキストとして保存された数値が含まれている場合(エクスポートされたスプレッドシートでよくあるデータ品質の問題)、StringValue はテキストをそのまま返しますが、DecimalValue は解析を試み、失敗した場合は 0 を返します。 本番コードでは、予期しないデータを型付き値として扱う前に、必ず検証を行ってください。
日付セルとブール型セルの処理
Excelの日付セルは、内部的にはシリアル番号として保存されます。 IronXL は、手動の計算なしに.NETオブジェクトに変換するために DateTimeValue を公開します。 TRUE または FALSE を含むセルに対して、BoolValue は文字列比較なしで正しいブール値を返します。 これらの型付きアクセサーは、汎用的なテキストベースのパーサーでスプレッドシートを読み込む際によく発生する、ある種のデータ型バグを解消します。
行とセルを反復処理するにはどうすればよいですか?
データセットを反復処理するには、範囲または行コレクションが必要です。 IronXLは両方のアプローチをサポートしており、データの形状に合わせてそれらを組み合わせることができます。
using IronXL;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];
// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
var row = sheet.Rows[rowIndex];
var values = new System.Text.StringBuilder();
foreach (var cell in row)
{
if (cell.Value != null)
values.Append($"{cell.StringValue}\t");
}
Console.WriteLine(values.ToString().TrimEnd());
}
using IronXL;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];
// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
var row = sheet.Rows[rowIndex];
var values = new System.Text.StringBuilder();
foreach (var cell in row)
{
if (cell.Value != null)
values.Append($"{cell.StringValue}\t");
}
Console.WriteLine(values.ToString().TrimEnd());
}
Imports IronXL
Imports System.Text
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
Dim sheet As WorkSheet = workbook.WorkSheets(0)
' Iterate a cell range -- skips header row
For Each cell In sheet("A2:D100")
Console.WriteLine($"{cell.AddressString}: {cell.Text}")
Next
' Row-by-row with column access
For rowIndex As Integer = 1 To sheet.RowCount - 1
Dim row = sheet.Rows(rowIndex)
Dim values As New StringBuilder()
For Each cell In row
If cell.Value IsNot Nothing Then
values.Append($"{cell.StringValue}" & vbTab)
End If
Next
Console.WriteLine(values.ToString().TrimEnd())
Next

範囲文字列 "A2:D100" は、フラットなセルコレクションを作成します。 指定された範囲内の行は、上から下、左から右の順に処理されます。 このパターンは、DataTable、またはデータベースへのエクスポートに適しています。
sheet.RowCount プロパティはワークシートで最後に使用された行を反映するため、データが終了するとループは自動的に終了します。 Excelの範囲反復処理ガイドでは、列優先走査を含むその他の反復処理パターンについても解説しています。
ヘッダー行をスキップする
ほとんどの表計算ソフトには、データではなく列名を説明するヘッダー行があります。 範囲反復を 2 行目 (例: "A2:D100") から開始するか、インデックス ループを rowIndex = 1 から開始してヘッダーをスキップします。 ToDataTable(true) を使用すると、 IronXL はヘッダー検出を自動的に処理し、最初の行から列名をマッピングします。
複数のExcel形式をどのように処理しますか?
IronXLは、拡張子とファイルヘッダーからファイル形式を自動的に検出します。 APIはXLSX、XLS、CSVファイルで同一であるため、条件分岐ロジックを用いることなく、同じ解析コードが3つの形式すべてで機能します。
using IronXL;
// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook = WorkBook.Load("Legacy.xls");
WorkBook csvBook = WorkBook.Load("Export.csv");
// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;
// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");
Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows: {sheet2.RowCount}");
Console.WriteLine($"CSV rows: {sheet3.RowCount}");
using IronXL;
// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook = WorkBook.Load("Legacy.xls");
WorkBook csvBook = WorkBook.Load("Export.csv");
// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;
// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");
Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows: {sheet2.RowCount}");
Console.WriteLine($"CSV rows: {sheet3.RowCount}");
Imports IronXL
' Load different formats with identical API
Dim xlsxBook As WorkBook = WorkBook.Load("Modern.xlsx")
Dim xlsBook As WorkBook = WorkBook.Load("Legacy.xls")
Dim csvBook As WorkBook = WorkBook.Load("Export.csv")
' Access worksheets identically across formats
Dim sheet1 As WorkSheet = xlsxBook.DefaultWorkSheet
Dim sheet2 As WorkSheet = xlsBook.DefaultWorkSheet
Dim sheet3 As WorkSheet = csvBook.DefaultWorkSheet
' Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv")
csvBook.SaveAs("structured_output.xlsx")
Console.WriteLine($"XLSX rows: {sheet1.RowCount}")
Console.WriteLine($"XLS rows: {sheet2.RowCount}")
Console.WriteLine($"CSV rows: {sheet3.RowCount}")
CSVファイルの場合、 IronXLはRFC 4180の規則を尊重し、カンマを含む引用符付きフィールド、引用符付き値内の改行、エスケープされた二重引用符などに対応しています。 CSVからXLSXへの変換ガイドでは、標準以外のCSVエクスポートにおける区切り文字のカスタマイズについて説明しています。
アプリケーションが外部システムからファイルを受け入れる必要がある場合、読み込む前にファイル拡張子を調べ、内容を検証するのが良い方法です。 IronXLは、ファイルが破損している場合やサポートされていない形式の場合に、分かりやすい例外をスローします。この例外を捕捉してユーザーに表示することができます。
Excelデータに対して高度なクエリを実行するにはどうすればよいですか?
IronXLは、セルごとの読み取り機能に加え、集計関数とLINQ互換性を提供し、ワークシートの範囲をクエリ可能なコレクションに変換します。
using IronXL;
using System.Linq;
WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin = sheet["D2:D50"].Avg();
// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
.Where(c => c.DecimalValue > 1000)
.Select(c => new { c.AddressString, c.DecimalValue });
foreach (var row in highValueRows)
Console.WriteLine($"High value at {row.AddressString}: {row.DecimalValue:C}");
// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
using IronXL;
using System.Linq;
WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin = sheet["D2:D50"].Avg();
// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
.Where(c => c.DecimalValue > 1000)
.Select(c => new { c.AddressString, c.DecimalValue });
foreach (var row in highValueRows)
Console.WriteLine($"High value at {row.AddressString}: {row.DecimalValue:C}");
// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
Imports IronXL
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("Financials.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Built-in aggregates -- no manual looping needed
Dim totalSales As Decimal = sheet("B2:B50").Sum()
Dim maxRevenue As Decimal = sheet("C2:C50").Max(Function(c) c.DecimalValue)
Dim avgMargin As Decimal = sheet("D2:D50").Avg()
' LINQ filtering directly on a range
Dim highValueRows = sheet("C2:C50") _
.Where(Function(c) c.DecimalValue > 1000) _
.Select(Function(c) New With {Key .AddressString = c.AddressString, Key .DecimalValue = c.DecimalValue})
For Each row In highValueRows
Console.WriteLine($"High value at {row.AddressString}: {row.DecimalValue:C}")
Next
' Write a calculated result back to the sheet
sheet("E2").Value = totalSales
workbook.SaveAs("Financials_Updated.xlsx")
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}")

LINQとの互換性は、データベースにインポートする前に行をフィルタリングする必要がある場合や、列内のすべての値がしきい値を満たしていることを検証する必要がある場合に役立ちます。 このライブラリはLINQが実行される前に数式を評価するため、集計クエリは常に数式文字列ではなく、最終的に計算された値に対して動作します。
IronXLを使用した LINQ チュートリアルでは、ワークシートの結合、列によるグループ化、結果を厳密に型指定されたオブジェクトに投影するといった、データパイプラインコードにおける多くの定型コードを削減するパターンについて解説します。
Excelデータをデータテーブルにエクスポートするにはどうすればよいですか?
多く for .NETアプリケーションは、スプレッドシート データを ADO.NET DataTable にロードして、さらに処理したりデータベースに挿入したりします。 IronXLは、手動での列マッピングを不要にする直接変換方法を提供します。
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows: {dataTable.Rows.Count}");
// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows: {dataTable.Rows.Count}");
// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert worksheet to DataTable -- first row becomes column headers
Dim dataTable As DataTable = sheet.ToDataTable(True)
Console.WriteLine($"Columns: {dataTable.Columns.Count}")
Console.WriteLine($"Rows: {dataTable.Rows.Count}")
' Iterate the DataTable normally
For Each row As DataRow In dataTable.Rows
Console.WriteLine($"{row("ProductName")} -- {row("Quantity")} -- {row("Price")}")
Next
true を ToDataTable に渡すと、最初のワークシート行が列ヘッダーとして扱われます。 結果として得られる DataTable は、ヘッダー テキストと一致する文字列列名を使用するため、後続の LINQ-to-DataSet クエリが読みやすくなります。 DataTableのエクスポートに関するドキュメントには、null値の処理方法と型推論オプションについて記載されています。
このパターンは、下流のコードが既に DataTable -- を期待している場合に特に役立ちます。たとえば、SQL Server に行を挿入するために SqlBulkCopy を呼び出す場合などです。 XLSX ファイルを読み込み、DataTable に変換して、列マッピングの定型コードを書かずに一括挿入できます。
| 手術 | API | 返品 |
|---|---|---|
| ファイルを読み込む | `WorkBook.Load(path)` | `WorkBook` |
| インデックスでワークシートを取得する | `workbook.WorkSheets[0]` | `WorkSheet` |
| 名前でワークシートを取得する | `workbook.GetWorkSheet("name")` | `WorkSheet` |
| 文字列セルを読み込む | `sheet["A1"].StringValue` | `文字列` |
| 小数点セルを読み取る | `sheet["B1"].DecimalValue` | `decimal` |
| 反復範囲 | `foreach cell in sheet["A2:D100"]` | `IEnumerable |
| 範囲を合計する | `sheet["B2:B50"].Sum()` | `decimal` |
| データテーブルにエクスポート | `sheet.ToDataTable(true)` | `DataTable` |
APIの一覧については、 IronXL APIリファレンスを参照してください。 このリファレンスには、すべてのプロパティとメソッドが網羅されており、パラメータの説明と戻り値の型に関する詳細情報も含まれています。
次のステップは何ですか?
適切なライブラリさえあれば、C#でExcelファイルを読み込むのは簡単です。 IronXLはOfficeへの依存関係を解消し、APIインターフェースを簡素化し、XLSX、XLS、CSV形式を同じコードパスで処理します。 ここで説明するパターン(ワークブックの読み込み、入力されたセル値の読み取り、範囲の反復処理、集計の実行、およびエクスポート)は、実際のスプレッドシート読み取り要件の大部分をカバーします。
これらのパターンをさらに発展させるには:
プロジェクトの設定手順と実行時の要件については、 IronXLの入門ドキュメントを参照してください。 文章作成、書式設定、グラフ作成に関するハウツーガイドをご覧ください。
- IronXLが自動的に評価するExcel関数を理解するために、 Excel数式サポートガイドを参照してください。
- 本番環境への導入オプションについては、 IronXLのライセンスページをご確認ください。
- IronXLのブログでは、データ検証、ピボットテーブルのエクスポート、パスワードで保護されたファイルの処理などに関する具体的な例をご覧いただけます。
IronXLを他のライブラリと比較評価するチーム向けに、 IronXLとEPPlusの比較、およびIronXLとNPOIの比較では、パフォーマンスベンチマークとAPIの違いについて解説しています。 どちらの比較にも、各ライブラリにおける同等の操作のコードサンプルが含まれています。
旧システム由来の特殊なスプレッドシート構造に遭遇した場合、マイクロソフト社独自のExcelファイル形式仕様は有用な参考資料となります。 ECMA-376規格は、 XLSXファイルが従うOOXML形式を定義しています。
まずは無料のIronXLトライアルライセンスで、本番ライセンスを契約する前に、ご自身のプロジェクトでAPIの全機能をテストしてみてください。
よくある質問
C#でExcelファイルを読む最良の方法は何ですか?
C#でExcelファイルを読み取る最良の方法は、 IronXLなどのOfficeに依存しない専用ライブラリを使用することです。IronXLはMicrosoft ExcelやCOM Interopを必要とせずにXLSX、XLS、CSV形式を処理できるため、サーバー環境やコンテナ環境でも安全に使用できます。
IronXLを使用するには Microsoft Office をインストールする必要がありますか?
いいえIronXLはNuGetパッケージとして配布されるスタンドアロン for .NETライブラリです。マシン上にMicrosoft Office、Excel、その他のCOMコンポーネントは必要ありません。
IronXL はどのような Excel ファイル形式をサポートしていますか?
IronXLはXLSX、XLS、CSVファイルの読み書きに対応しています。ファイル拡張子とコンテンツヘッダーに基づいて、自動的にフォーマットが検出されます。
.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?
ターミナルで「dotnet add package IronXL.Excel」を実行するか、Visual Studio パッケージ マネージャー コンソールで「Install-Package IronXL.Excel」を実行します。
IronXL はExcel データを DataTable にエクスポートできますか?
はい。WorkSheet.ToDataTable(true) メソッドは、任意のワークシートを ADO .NET DataTable に変換します。true が渡されると、最初の行が列ヘッダーとして使用されます。
IronXL はExcel データに対する LINQ クエリをサポートしていますか?
はい。IronXLIronXL範囲は IEnumerable を実装しているため、Where、Select、Sum、Max、Avg などの LINQ メソッドをワークシート範囲で直接使用できます。
IronXLはExcelの数式をどのように処理しますか?
IronXLは、セルの値を読み取る際に数式を自動的に評価します。数式セルで sheet["B10"].DecimalValue を読み取ると、数式文字列ではなく計算結果が返されます。
IronXL はど for .NETバージョンをサポートしていますか?
IronXL は、.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2、および.NET Standard 2.0 をサポートしています。



