IRONSOFTWAREHOME
IRONXLの使用

Excel をインストールせずに C# で Open Office Excel ファイルを読み取る方法

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

適切なライブラリを使用すれば、C# で OpenDocument Spreadsheet (ODS) ファイルや Excel ファイルを読み込み、処理するのは簡単です。 IronXL を使用すると、Microsoft Excel のインストールや COM 登録、Interop の煩わしい手続きが一切不要で、単一のメソッド呼び出しによって任意の XLS、XLSX、ODS、または CSV ファイルを WorkBook オブジェクトにロードできます。 このガイドでは、パッケージのインストール、ファイルの読み込み、型付きセル値の抽出、名前付きワークシートの操作、結合セルの処理、Linuxまたはコンテナ環境へのデプロイなど、すべての手順を順を追って説明します。

.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?

NuGetパッケージ マネージャーのインストール

NuGetパッケージマネージャーを使用して、 IronXLをプロジェクトに追加してください。 Visual StudioでPackage Manager Consoleを開き、実行してください:

PM > Install-Package IronXL.Excel

IronXL は .NET 8、.NET 9、.NET 10、.NET Framework 4.6.2以上、および .NET Standard 2.0 に対応しているため、最新のコードベースと従来のコードベースの両方に適しています。パッケージをインストールしたら、スプレッドシートを操作するファイルの先頭に using IronXL; ディレクティブを追加してください。これで、最初のワークブックを読み込む準備が整います。

Azure Functions、Dockerコンテナ、またはLinuxホスト型APIの場合、追加のランタイム構成は不要です。 このライブラリは必要なものをすべて内部にバンドルしており、Excelの自動化コンポーネントを呼び出すことはありません。

OpenOfficeまたはExcelファイルをC#でどうやってロードしますか?

IronXLでは、ODS、XLS、XLSX、CSVファイルをWorkBook.Loadメソッドを通じて同一に扱います。 絶対パスまたは相対パスを渡すと、ライブラリは拡張子だけでなく、ファイルヘッダーからファイル形式を検出します。 これは、.ods から .xlsx に名前を変更されたファイルが依然として正しく読み取られることを意味します。

using IronXL;

// Load an OpenDocument Spreadsheet (.ods) produced by LibreOffice Calc or OpenOffice
WorkBook workbook = WorkBook.Load("quarterly_report.ods");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Read a cell value
string companyName = sheet["A1"].StringValue;
int recordCount   = sheet["B1"].IntValue;

Console.WriteLine($"Company : {companyName}");
Console.WriteLine($"Records : {recordCount}");

同じ呼び出し方法はXLSXファイルとXLSファイルにも有効です。パスを変更するだけで済みます。 WorkBook.Load は、ソースフォーマットに関係なく同じ強く型付けされたオブジェクトを返すので、ファイルがMicrosoft Excel、LibreOffice、またはその他のODF準拠のアプリケーションから送信された場合でも、残りのコードは同一のままです。

ワークシートの各行とセルをどのように読み取るのですか?

行コレクションの反復処理

すべての行とセルを繰り返し処理することは、Excel処理タスクの中で最も一般的なものです。これには、取り込みデータの検証、レコードの変換、またはレポートパイプラインへのデータ供給が含まれます。IronXLは、すべてのRowsコレクションを公開しています。

using IronXL;

WorkBook workbook  = WorkBook.Load("customers.xlsx");
WorkSheet worksheet = workbook.WorkSheets[0];

Console.WriteLine($"Total rows    : {worksheet.RowCount}");
Console.WriteLine($"Total columns : {worksheet.ColumnCount}");
Console.WriteLine();

foreach (var row in worksheet.Rows)
{
    foreach (var cell in row)
    {
        if (!cell.IsEmpty)
            Console.Write($"{cell.StringValue,-20}");
    }
    Console.WriteLine();
}

RowCountColumnCount プロパティは、埋め込まれた範囲のみを返します。空の末尾の行と列は含まれません。 スパースシート上での不要な処理を防ぐために、読み込む前にcell.IsEmptyを確認してください。

大きなファイルの場合、完全なシートの繰り返しではなく、範囲ベースのアクセス (worksheet["A1:D500"]) を使用することを検討してください。 これにより、メモリに読み込まれるセル数が制限され、データの一部のみが必要な場合の処理​​速度が向上します。

セルから入力された値を抽出するにはどうすればよいですか?

型付きプロパティアクセサー

実際の表計算ソフトのセルには、文字列、整数、小数、ブール値、日付などが含まれます。 IronXLは専用の型付きプロパティを公開しているため、生の文字列を手動で解析する必要は一切ありません。

using IronXL;

WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet   = workbook.GetWorkSheet("Products");

// Typed accessors handle conversion automatically
string  productName = sheet["A2"].StringValue;
int     quantity    = sheet["B2"].IntValue;
decimal unitPrice   = sheet["C2"].DecimalValue;
bool    inStock     = sheet["D2"].BoolValue;
DateTime? lastAudit = sheet["E2"].DateTimeValue;

Console.WriteLine($"Product  : {productName}");
Console.WriteLine($"Qty      : {quantity}");
Console.WriteLine($"Price    : {unitPrice:C}");
Console.WriteLine($"In Stock : {inStock}");
Console.WriteLine($"Audited  : {lastAudit?.ToString("d") ?? "Never"}");

セルに数式が含まれている場合、 IronXL はその数式を評価し、同じ型のプロパティを通して計算結果を返します。 別途評価メソッドを呼び出す必要はありません。 空のセルや互換性のない型を含むセルについては、ライブラリは例外をスローするのではなく、その型のデフォルト値を返すため、入力検証ロジックが簡素化されます。

IronXLのセル値プロパティと、それに対応する.NET型
プロパティ.NETタイプ空の場合に返される注意事項
StringValue文字列空の文字列常に安全。任意のセルをテキストに変換します。
IntValueint0小数点以下を切り捨てる
DecimalValue10進数0m財務データの精度を維持する
DoubleValueダブル0.0科学的または統計的値に使用する
ブール値ブールfalseExcelのTRUE/FALSEセルを読み取ります
DateTimeValueDateTime?nullnull許容 -- 使用前にチェックする

複数の名前付きワークシートをどのように操作しますか?

名前、インデックス、または反復によるアクセス

Enterpriseのスプレッドシートには、月ごと、地域ごと、製品ラインごとなど、複数の名前付きシートが含まれていることがよくあります。IronXLIronXL、これらのシートにアクセスするための複数の方法を提供しています。

using IronXL;

WorkBook workbook = WorkBook.Load("annual_sales.xlsx");

// Option 1: access by name (throws if the sheet does not exist)
WorkSheet januarySheet = workbook.GetWorkSheet("January");

// Option 2: iterate all sheets in the workbook
foreach (WorkSheet ws in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {ws.Name}  |  Rows: {ws.RowCount}");

    // Read the header row from each sheet
    string header = ws["A1"].StringValue;
    Console.WriteLine($"  Header: {header}");
}

// Option 3: access by zero-based index
WorkSheet lastSheet = workbook.WorkSheets[workbook.WorkSheets.Count - 1];
Console.WriteLine($"Last sheet: {lastSheet.Name}");

シート名がデザイン時に既知の場合は、GetWorkSheet が最も明確なオプションです。 動的処理では、シート名がユーザー入力や設定から取得されるため、WorkSheets コレクションを反復処理することにより、ハードコードされた仮定を排除し、異なる数のシートを持つワークブックに対処します。

結合されたセルと書式設定された領域はどのように処理しますか?

レポートやダッシュボードでは、見出し、グループ化されたラベル、および要約行に結合セルがよく使用されます。 IronXLは、結合領域の左上のセルから、Excelが表示するのと全く同じ値を読み取ります。

using IronXL;

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

// The merged region A1:D1 stores its value in cell A1
string reportTitle = sheet["A1"].StringValue;
Console.WriteLine($"Report title : {reportTitle}");

// Read cell formatting metadata
var titleCell = sheet["A1"];
Console.WriteLine($"Bold         : {titleCell.Style.Font.Bold}");
Console.WriteLine($"Font size    : {titleCell.Style.Font.Height}");

// Scan an entire column for non-empty section headers
foreach (var cell in sheet["A1:A100"])
{
    if (!cell.IsEmpty && cell.Style.Font.Bold)
        Console.WriteLine($"Section header at {cell.AddressString}: {cell.StringValue}");
}

Style プロパティツリーは、OOXML SpreadsheetML 仕様の構造を反映しています。そのため、Open XML SDK を使用したことがある場合は、プロパティ名に馴染みがあるでしょう。 しかし、 IronXLはそうした複雑さをすべて、ユーザー側でXMLを操作する必要のない、クリーンなAPIに包み込んでいます。

同じAPIを使用してCSVファイルをインポートするにはどうすればよいですか?

データベースのエクスポート、CRMシステム、レガシーアプリケーションによって生成されたCSVファイルは、WorkBook.Load呼び出しを通じて同様に読み取ることができます。 IronXLはファイルの内容から区切り文字を推測します。

using IronXL;

// Load a comma-separated values file -- same method, same API
WorkBook csvWorkbook  = WorkBook.Load("export.csv");
WorkSheet csvSheet    = csvWorkbook.DefaultWorkSheet;

Console.WriteLine($"CSV rows loaded: {csvSheet.RowCount}");

// Process rows exactly like any other worksheet
foreach (var row in csvSheet.Rows)
{
    string id   = row[0].StringValue;
    string name = row[1].StringValue;
    Console.WriteLine($"{id,-10} {name}");
}

読み込み後、csvWorkbook.SaveAs("output.xlsx")を使用してデータをXLSXとして節約できます。 これは、CSVからExcelへの変換パイプラインでよく見られるパターンです。CSVファイルを受け取り、計算列や書式設定を追加して内容を充実させ、書式設定されたXLSXレポートをユーザーに返します。

タブ区切りファイルやカスタム区切り文字の場合は、WorkBook.LoadCSV("file.tsv", fileFormat: ExcelFileFormat.TSV)を使用して形式を明示的に指定してください。

IronXLでサポートされている入力ファイル形式
形式拡大制作:注意事項
XLSX.xlsxExcel 2007以降、LibreOfficeデフォルトのモダンフォーマット。XMLベース
XLS.xlsExcel 97~2003バイナリ形式。完全な読み書きサポート。
ODS.odsLibreOffice、OpenOfficeOpenDocumentスプレッドシート標準
CSV.csvあらゆるアプリケーション区切り文字は自動検出されました。書式設定は行われません。
TSV.tsvデータベースのエクスポートタブ区切り。フォーマットを明示的に指定してください。

IronXLはMicrosoft.Office.Interop.Excelと比べてどうですか?

Interop、Open XML SDK、およびIronXLの並列比較

.NETで Excel の自動化を行う際のIronXLの最も一般的な代替手段は、 Microsoft.Office.Interop.Excelです。 トレードオフを理解することで、プロジェクトに最適なツールを選ぶことができます。

Microsoft Interopは、Excel COMオブジェクトモデルをラップします。 つまり、Webサーバー、ビルドエージェント、クラウドVMなど、コードを実行するすべてのマシンにExcelをインストールする必要があるということです。 COMオブジェクトのライフサイクル管理は手動です。すべてのWorkbookオブジェクトを明示的に解放しなければ、Excelのプロセスがバックグラウンドで蓄積し、サーバーが再起動するまでメモリを消費し続けます。 ライセンスも懸念事項です。OfficeのEULA(エンドユーザー使用許諾契約)では、多くのシナリオにおいてサーバー側の自動化が禁止されています。

IronXLはこれらの制約をすべて回避します。 これはCOMに依存しない、純粋なマネージドライブラリです。 WorkBookオブジェクトは標準 for .NETクラスです。 ガベージコレクタがクリーンアップ処理を行います。同じコードを開発者用ノートパソコン、Azure App Service、Dockerコンテナ、またはLinuxを実行しているRaspberry Piで実行できます。

MicrosoftのOpen XML SDKも別の選択肢です。Excelを必要とせずにOOXMLファイル形式に直接アクセスできますが、非常に低レベルで動作するため、XML要素を直接操作する必要があります。 単一のセル値を読み取るには、共有文字列テーブル、セル参照、およびスタイルインデックスをナビゲートする必要があります。 IronXLはすべてをこのガイド全体に示されている単一行のsheet["A1"].StringValue呼び出しにまとめています。

Excel処理をLinuxとDockerにデプロイするにはどうすればよいですか?

サーバー展開においてこそ、IronXLがExcelに依存しないことの真価が発揮される。 Windowsで書いたコードは、Ubuntu、Alpine Linux、macOSでもそのまま動作します。 コンテナ化されたデプロイメントの場合、Dockerfileに特別な設定は必要ありません。

# Standard .NET runtime image -- no Office packages needed
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "ExcelProcessor.dll"]
SHELL

Azure FunctionsとAWS Lambdaの場合、 IronXLは追加の設定なしでマネージドランタイム内で動作します。 COMの初期化手順がないため、コールドスタート時のオーバーヘッドは最小限です。

スレッドセーフ性が組み込まれています:複数のスレッドが異なるWorkBookインスタンスを同時に開くことができ、調整を必要としません。 ユーザーがアップロードしたスプレッドシートを取り込むバックグラウンドジョブなどで、数千のファイルを並行して処理する必要がある場合、Parallel.ForEachTask.WhenAllWorkBook インスタンスのプールで使用しても、破損のリスクはありません。

IronXLは初期化時にワークブック全体ではなく、要求されたワークシートのみをメモリに読み込むため、メモリ使用量は予測可能なままです。 非常に大きなファイルの場合、この違いは重要になります。例えば、50MBのシートが10枚含まれているワークブックでは、1枚のシートを読み込むためだけに500MBのRAMは必要ありません。 IronXLパフォーマンスドキュメントでは、高ボリュームのファイル処理シナリオを処理するための追加戦略について説明しています。

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

プロジェクトでIronXL を検証する最も簡単な方法は、 NuGetパッケージをインストールし、このガイドのサンプルを実際の環境にあるファイルに対して実行することです。 無料トライアルライセンスでは、本番環境への移行時にコード変更を一切必要とせず、すべての機能が利用可能になります。

ファイル読み取りを補完するIronXLの関連機能をご覧ください。

ライセンス、クロスプラットフォーム対応、または特定のファイル形式要件に関するご質問は、 IronXLサポートチームがライブチャットとメールで対応いたします。

最初のステップ:
arrow pointer
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。