フッターコンテンツにスキップ
IRONXLの使用

IronXLを使用して C# で Excel ファイルを読み取る方法

C# アプリケーションで Excel ファイルを読み取ることは、ビジネス ソフトウェア、データ処理パイプライン、レポート システムで繰り返し必要になります。 Microsoft Office Interop を使用する従来のアプローチでは、すべてのサーバーまたはワークステーションに Excel をインストールする必要があり、脆弱な依存関係が生じて展開とライセンスが複雑になります。 IronXL は、その依存関係を完全に排除します。アプリケーションは、環境内のどこにも Office がインストールされていなくても、XLSX、XLS、CSV、およびその他のスプレッドシート形式を読み取ります。

このチュートリアルでは、ライブラリのインストール、ワークブックの読み込み、型指定されたセル値の抽出、行と列の反復処理、集計計算の実行、完全な従業員データ リーダーの構築など、必要なすべての手法について説明します。 すべての例では、 .NET 10 を対象とするトップレベルのステートメントを持つ C# を使用します。


Excel 処理用にIronXLをインストールするにはどうすればよいでしょうか?

Visual Studio でNuGetパッケージ マネージャー コンソールを開き、次のコマンドを実行してIronXL をプロジェクトに追加します。 あるいは、ターミナルから作業したい場合は、2 行目に示す.NET CLI コマンドを使用します。

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

パッケージは数秒でインストールされ、プロジェクトに単一のマネージアセンブリ参照を追加します。 COM 登録、Office プライマリ相互運用アセンブリ、およびバージョン固有の Excel 依存関係を管理する必要はありません。

インストール後、スプレッドシート データで動作する各ファイルの先頭に using ディレクティブを追加します。

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

この単一の名前空間により、WorkSheet、セル範囲、型指定された値のプロパティ、集計関数、およびその他のすべてのIronXL型にアクセスできます。 IronXL .Excel のNuGetギャラリー ページには、利用可能なすべてのリリースとその完全な依存関係ツリーがリストされています。


IronXL はどのような Excel ファイル形式をサポートしていますか?

アプリケーションが処理する必要がある形式を理解することで、実行する API 呼び出しとプロジェクトで採用するストレージの決定の両方が決まります。

XLSX (Excel 2007 以降のデフォルト形式) は、XML ファイルの ZIP アーカイブです。 100 万行を超える行、豊富な書式設定、ピボット テーブル、名前付き範囲をサポートします。 最新のデータ パイプラインのほとんどは XLSX 出力を生成するため、これが最も頻繁に遭遇する形式です。

XLS は、Excel 2003 以前で使用されていた従来のバイナリ形式です。 一部のエンタープライズ システムでは依然として XLS がエクスポートされるため、古いインフラストラクチャと統合する場合は、この形式の信頼性の高いサポートが重要になります。 IronXL は、特別な設定をすることなく XLS ファイルを読み取ります。

XLSM はマクロ サポートによって XLSX を拡張します。 IronXL は、埋め込まれた VBA コードを実行しなくても XLSM ファイルからスプレッドシート データを読み取ります。これは、サーバー側のデータ抽出の正しい動作です。

CSV と TSV は、システム間のデータ交換に広く使用されているプレーンテキストの表形式です。 WorkBook.LoadCSV はコンマ区切りのファイルを処理し、 IronXL はコードが既にナビゲートする方法を知っている同じ WorkBook オブジェクトを返すため、ソース形式に関係なく、データ読み取りロジックは均一に保たれます。

IronXL は、WorkBook.Load を呼び出すと、ファイル拡張子からファイル形式を自動的に検出します。 ほとんどの場合、形式を明示的に指定する必要がないため、複数のソースからの入力を処理するコードが簡素化されます。

IronXLでサポートされているExcelファイル形式
形式 拡大 ロードメソッド 注意事項
オープンXMLワークブック .xlsx WorkBook.Load デフォルトのモダンフォーマット
レガシーバイナリ .xls WorkBook.Load Excel 2003以前
マクロ対応 .xlsm WorkBook.Load データが読み取られましたが、マクロは実行されませんでした
カンマ区切り .csv WorkBook.LoadCSV 最適化されたCSVパーサー
タブ区切り .tsv WorkBook.Load タブ区切り文字のバリエーション

Excel ブックを読み込んで読み取るにはどうすればよいでしょうか?

WorkBook.Load メソッドは、すべてのファイルベースの操作のエントリ ポイントです。 ファイル パスを渡すと、 IronXL はすぐにクエリを実行できる、完全に設定されたワークブック オブジェクトを返します。

using IronXL;

// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");

// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");

// Access sheets by name or by zero-based index
WorkSheet byName  = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];

// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
using IronXL;

// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");

// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");

// Access sheets by name or by zero-based index
WorkSheet byName  = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];

// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
$vbLabelText   $csharpLabel

DefaultWorkSheet プロパティは、単一シート ファイルの大部分をカバーする最初のシートを返します。 ファイルに複数のシートが含まれている場合、GetWorkSheet は名前で取得し、WorkSheets[n] はゼロベースのインデックスで取得します。 WorkBook API リファレンスには、ワークブック オブジェクトのすべてのオーバーロードとプロパティが記載されています。

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 1 - インストール

入力

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 2 - サンプル Excel 入力

出力

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 3 - コンソール出力


Excel から入力されたセルの値を読み取るにはどうすればよいでしょうか?

IronXLのすべてのセルは、必要なデータ型の値を返す型指定されたプロパティを公開します。手動での解析やキャストは必要ありません。 型指定されたプロパティは、基になるセル表現からの強制変換を自動的に処理します。

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Extract typed values from row 2
int      employeeId = sheet["A2"].IntValue;
string   name       = sheet["B2"].StringValue;
string   department = sheet["C2"].StringValue;
decimal  salary     = sheet["D2"].DecimalValue;
DateTime hireDate   = sheet["E2"].DateTimeValue;

Console.WriteLine($"ID:         {employeeId}");
Console.WriteLine($"Name:       {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary:     {salary:C}");
Console.WriteLine($"Hired:      {hireDate:d}");

// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text;   // "$75,000.00"
string formattedDate   = sheet["E2"].Text;   // "28/02/2026"

// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
    string value = sheet["B3"].StringValue;
}
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Extract typed values from row 2
int      employeeId = sheet["A2"].IntValue;
string   name       = sheet["B2"].StringValue;
string   department = sheet["C2"].StringValue;
decimal  salary     = sheet["D2"].DecimalValue;
DateTime hireDate   = sheet["E2"].DateTimeValue;

Console.WriteLine($"ID:         {employeeId}");
Console.WriteLine($"Name:       {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary:     {salary:C}");
Console.WriteLine($"Hired:      {hireDate:d}");

// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text;   // "$75,000.00"
string formattedDate   = sheet["E2"].Text;   // "28/02/2026"

// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
    string value = sheet["B3"].StringValue;
}
$vbLabelText   $csharpLabel

Text プロパティは、Excel でフォーマットされたとおりの表示値を返します。これは、生の数値ではなくフォーマットされた数値文字列が必要な場合に便利です。 Excel 数式を含むセルの場合、 IronXL は式を評価し、同じ型のプロパティを通じて計算結果を返します。 追加の値プロパティ -- FloatValue -- がセル値参照に表示されます。


Excel の行と列を反復処理するにはどうすればよいでしょうか?

データセット内のすべてのレコードを処理するには、行と列を反復処理する必要があります。 IronXL の範囲構文は Excel の A1 表記に直接マッピングされるため、スプレッドシートの数式を書いたことがある人なら、セルのブロックを選択することは馴染みのある操作です。

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
    if (!string.IsNullOrEmpty(cell.Text))
        Console.WriteLine($"  - {cell.Text}");
}

// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
        Console.Write(cell.Text.PadRight(15));
    Console.WriteLine();
}
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
    if (!string.IsNullOrEmpty(cell.Text))
        Console.WriteLine($"  - {cell.Text}");
}

// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
        Console.Write(cell.Text.PadRight(15));
    Console.WriteLine();
}
$vbLabelText   $csharpLabel

範囲 sheet["B2:B100"] は、セル オブジェクトの列挙可能なコレクションを返します。 string.IsNullOrEmpty をチェックすると、空白行が適切にスキップされます。 ワークシート データ範囲ガイドに記載されている Rows プロパティは、シートを一度に 1 行ずつ調べて、事前に列数を知る必要なく各行のセルを表示します。

出力

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 4 - Excel 行出力


Excel データで集計計算を実行するにはどうすればよいでしょうか?

IronXL には、セル範囲で直接結果を計算する組み込みの集計関数が含まれており、手動の累積ループは必要ありません。

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Built-in aggregate methods work on any named range
decimal total   = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest  = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();

Console.WriteLine($"Total Payroll:  {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary:  {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");

// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
    .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
    .Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Built-in aggregate methods work on any named range
decimal total   = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest  = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();

Console.WriteLine($"Total Payroll:  {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary:  {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");

// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
    .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
    .Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
$vbLabelText   $csharpLabel

Max、および Avg は、空のセルを自動的にスキップし、バックグラウンドで数値変換を処理します。 LINQ クエリを範囲に連鎖すると、フィルターされた集計 (部門の小計、日付範囲の合計、条件付きカウント) をIronXL API を離れることなく実行できます。


完全な従業員データリーダーをどのように構築しますか?

次の例では、これまでに説明したすべての内容を、従業員のスプレッドシートを読み込み、各レコードをフォーマットし、給与の合計を集計し、書き戻しを処理し、エラーを適切にキャッチする、本番環境対応のコンソール アプリケーションに組み立てます。

using IronXL;

try
{
    WorkBook workbook = WorkBook.Load("Employees.xlsx");
    WorkSheet sheet   = workbook.DefaultWorkSheet;

    Console.WriteLine("=== Employee Data Report ===\n");

    int     rowNumber     = 2;
    decimal totalSalary   = 0m;
    int     employeeCount = 0;

    while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
    {
        int      id         = sheet[$"A{rowNumber}"].IntValue;
        string   name       = sheet[$"B{rowNumber}"].StringValue;
        string   department = sheet[$"C{rowNumber}"].StringValue;
        decimal  salary     = sheet[$"D{rowNumber}"].DecimalValue;

        Console.WriteLine($"{id,4}  {name,-20}  {department,-15}  {salary,10:C}");

        totalSalary   += salary;
        employeeCount += 1;
        rowNumber     += 1;
    }

    Console.WriteLine($"\nTotal Employees: {employeeCount}");
    Console.WriteLine($"Total Payroll:   {totalSalary:C}");

    // Write a new record back to the sheet and save
    sheet["A10"].Value = 1010;
    sheet["B10"].Value = "Jane Doe";
    sheet["C10"].Value = "Finance";
    sheet["D10"].Value = 75000;
    workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
using IronXL;

try
{
    WorkBook workbook = WorkBook.Load("Employees.xlsx");
    WorkSheet sheet   = workbook.DefaultWorkSheet;

    Console.WriteLine("=== Employee Data Report ===\n");

    int     rowNumber     = 2;
    decimal totalSalary   = 0m;
    int     employeeCount = 0;

    while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
    {
        int      id         = sheet[$"A{rowNumber}"].IntValue;
        string   name       = sheet[$"B{rowNumber}"].StringValue;
        string   department = sheet[$"C{rowNumber}"].StringValue;
        decimal  salary     = sheet[$"D{rowNumber}"].DecimalValue;

        Console.WriteLine($"{id,4}  {name,-20}  {department,-15}  {salary,10:C}");

        totalSalary   += salary;
        employeeCount += 1;
        rowNumber     += 1;
    }

    Console.WriteLine($"\nTotal Employees: {employeeCount}");
    Console.WriteLine($"Total Payroll:   {totalSalary:C}");

    // Write a new record back to the sheet and save
    sheet["A10"].Value = 1010;
    sheet["B10"].Value = "Jane Doe";
    sheet["C10"].Value = "Finance";
    sheet["D10"].Value = 75000;
    workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
$vbLabelText   $csharpLabel

while ループは列 A が空になると終了し、ハードコードされた行数を必要とせずに、リーダーが任意の長さのスプレッドシートに適応できるようになります。 値を書き戻す場合は、読み取りと同じセル アドレス構文に従い、SaveAs により変更が新しいファイルに保持されるため、元のファイルはそのまま残ります。 try/catch ブロックは、不足しているファイル、ロックされたワークブック、破損したデータなど、入力ファイルが外部ソースから到着する運用環境で発生するすべてのシナリオを処理します。

出力

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 5 - 従業員データの出力

スプレッドシートを作成するためのガイドXLSX を CSV に変換するためのガイドでは、エンドツーエンドのワークフローで読み取りと書き込みを組み合わせる方法を説明します。 セル スタイル ガイドでは、フォーマットされた出力が必要な場合のフォント サイズ、色、境界線について説明します。

VB .NET IronXLを使用して Excel ファイルを読み込む: Microsoft Office を使用しないステップバイステップ ガイド: 画像 6 - Windows フォーム出力


高度な読書シナリオにはどのように対処しますか?

実際のプロジェクトでは、あまり一般的ではないが重要なシナリオがいくつか発生します。 名前付き範囲、ワークシートの検出、CSV の読み込みにはそれぞれ専用の API サポートがあります。

名前付き範囲を使用すると、セル アドレスではなく論理ラベルでデータを参照できます。 ワークブックの作成者が SalaryTable という名前付き範囲を定義した場合は、GetRangeByName を通じて直接アクセスします。

var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
$vbLabelText   $csharpLabel

ワークシート検出では、ワークブック内のすべてのシートが列挙されます。これは、タブの数が可変のファイルを処理するときに便利です。

foreach (WorkSheet ws in workbook.WorkSheets)
    Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
foreach (WorkSheet ws in workbook.WorkSheets)
    Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
$vbLabelText   $csharpLabel

CSV の読み込みでは、プレーン テキスト ファイル用に最適化された専用のメソッドが使用され、同じ範囲の API でナビゲートすると、次の WorkSheet が返されます。

WorkBook csv    = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
WorkBook csv    = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
$vbLabelText   $csharpLabel

これらのパターンは、データ移行プロジェクト、ETL パイプライン、自動レポート システムに表示される高度な読み取りシナリオをカバーしています。 完全な API サーフェスについては、 IronXLオブジェクト リファレンスを参照してください。

追加の権威ある参考文献:


次のステップは何ですか?

IronXL は、依存関係のある相互運用性チャレンジからの Excel ファイルの読み取りを、数行の簡単な C# コードに変換します。 ワークブックの読み込み、型指定された値の抽出、行ごとの反復処理、集計計算の実行、エッジ ケースの処理はすべて、展開環境のどこにも Microsoft Office がインストールされていなくても、同じ一貫した API パターンに従います。

チュートリアルから本番環境に移行するには:

  1. ライセンスを購入する前に、無料トライアルを開始してIronXL の全機能セットのロックを解除し、独自の Excel ファイルに対して検証します。
  2. スプレッドシートの作成、書式設定、スタイル設定、および変換に関するガイドについては、 IronXL の完全なドキュメントを参照してください。 3.オブジェクト参照と完全な APIを調べて、ライブラリで使用可能なすべてのクラス、メソッド、プロパティを見つけます。
  3. ワークフローで入力ファイルの読み取りだけでなく出力ファイルの生成も必要な場合は、スプレッドシートを作成するためのガイドを確認します。
  4. レポート生成、データ検証、複数シートの統合などの実際のシナリオを網羅した追加のチュートリアルについては、 IronXLブログ投稿インデックスを確認してください。

よくある質問

IronXLとは何ですか?

IronXLは.NETライブラリで、開発者はMicrosoft Officeをインストールすることなく、XLSXやXLSなどの様々な形式のExcelファイルを読み、編集し、作成することができます。

IronXLを使用して C# で Excel ファイルを読み取るにはどうすればよいでしょうか?

ファイル パスを指定して WorkBook.Load を呼び出してブックを開き、A1 表記と StringValue、IntValue、DecimalValue などの型指定されたプロパティを使用してセルにアクセスします。

Excelファイルの読み込みにMicrosoft Office InteropではなくIronXLを選ぶ理由は何ですか?

IronXLでは Microsoft Office をインストールする必要がないため、COM の依存関係がなくなり、サーバー側の展開が簡素化されます。

IronXL はどのような Excel ファイル形式を読み取ることができますか?

IronXLはXLSX、XLS、XLSM、CSV、TSV形式を読み取ります。ファイル拡張子に基づいて形式が自動的に検出されます。

IronXLは大規模なExcelファイルを効率的に処理できますか?

はい、 IronXLはパフォーマンスが最適化されており、大きな Excel ファイルを処理できるため、データ集約型のアプリケーションに適しています。

IronXL は.NET 10 で動作しますか?

はい、 IronXL は.NET 10 を含む最新 for .NETバージョンと.NET Frameworkプロジェクトをサポートしています。

IronXLで集計計算を実行するにはどうすればよいでしょうか?

任意のセル範囲に対して、組み込みのSum、Min、Max、Avgメソッドを使用できます。これらのメソッドは空のセルを自動的にスキップします。

IronXL はパスワードで保護された Excel ファイルを読み取ることができますか?

はい、WorkBook.Load の 2 番目の引数としてパスワードを渡します: WorkBook.Load("file.xlsx", "password")。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me