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

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

適切なライブラリを使用すると、C# で OpenDocument スプレッドシート (ODS) および Excel ファイルを読み取って処理するのは簡単です。 IronXLを使用すると、単一のメソッド呼び出しを使用して、XLS、XLSX、ODS、または CSV ファイルを WorkBook オブジェクトにロードできます。Microsoft Excel のインストールや COM の登録は必要なく、相互運用性の問題もありません。 このガイドでは、パッケージのインストール、ファイルの読み込み、入力されたセル値の抽出、名前付きワークシートの操作、結合されたセルの処理、Linux またはコンテナー化された環境への展開など、すべての手順について説明します。

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

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

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

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

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

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

C# で OpenOffice または Excel ファイルを読み込むにはどうすればよいでしょうか?

IronXL は、WorkBook.Load メソッドを通じて、ODS、XLS、XLSX、および CSV ファイルを同一に処理します。 絶対または相対ファイル パスを渡すと、ライブラリは拡張子だけでなくファイル ヘッダーから形式を検出します。 つまり、.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}");
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}");
$vbLabelText   $csharpLabel

XLSX ファイルと XLS ファイルでも同じ呼び出しが機能します。パスを変更するだけです。 WorkBook.Load は、ソース形式に関係なく同じ厳密に型指定されたオブジェクトを返すため、ファイルが Microsoft Excel、LibreOffice、またはその他の ODF 準拠アプリケーションからのものであるかどうかに関係なく、コードの残りの部分は同一のままになります。

ワークシート内のすべての行とセルをどのように読み取るのでしょうか?

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

すべての行とセルを反復処理することは、インポートデータの検証、レコードの変換、レポートパイプラインへのデータ入力など、Excel 処理で最も一般的なタスクです。IronXLは、すべての Rows コレクションを WorkSheet に公開します。

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();
}
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();
}
$vbLabelText   $csharpLabel

RowCount および ColumnCount プロパティは、入力された範囲のみを返します。末尾の空の行と列は含まれません。 読み取り前に 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"}");
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"}");
$vbLabelText   $csharpLabel

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

IronXLセル値プロパティとそれに相当する.NET型
プロパティ .NETタイプ 空のときに返す 注意事項
`StringValue` `文字列` 空の文字列 常に安全。任意のセルをテキストに変換します。
`IntValue` `int` `0` 小数点以下を切り捨てます
`DecimalValue` `decimal` `0m` 財務データの精度を維持
`DoubleValue` `ダブル` `0.0` 科学的または統計的な値に使用する
`BoolValue` `ブール` `false` ExcelのTRUE/FALSEセルを読み取ります
`DateTimeValue` `DateTime?` `null` Nullable -- 使用前にチェックする

複数の名前付きワークシートを操作するにはどうすればよいでしょうか?

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

エンタープライズスプレッドシートには、月ごと、地域ごと、製品ラインごとなど、複数の名前付きシートが含まれることがよくあります。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}");
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}");
$vbLabelText   $csharpLabel

設計時にシート名がわかっている場合は、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}");
}
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}");
}
$vbLabelText   $csharpLabel

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

同じ 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}");
}
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}");
}
$vbLabelText   $csharpLabel

ロード後、csvWorkbook.SaveAs("output.xlsx") を使用してデータを XLSX として保存できます。 これは、CSV から Excel への変換パイプラインの一般的なパターンです。CSV ファイルを受け取り、計算された列や書式設定でそれを拡充し、フォーマットされた XLSX レポートをユーザーに返します。

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

IronXLでサポートされている入力ファイル形式
形式 拡大 プロデューサー 注意事項
XLSX `.xlsx` Excel 2007以降、LibreOffice デフォルトの最新フォーマット、XMLベース
XLS `.xls` Excel 97~2003 バイナリ形式; 完全な読み取り/書き込みサポート
ODS `.ods` LibreOffice、OpenOffice OpenDocumentスプレッドシート標準
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 オブジェクトのライフサイクル管理は手動で行います。すべての Worksheet、および Workbook オブジェクトを明示的に解放する必要があります。そうしないと、Excel プロセスがバックグラウンドで蓄積され、サーバーが再起動するまでメモリを消費します。 ライセンスも懸念事項です。Office EULA では、多くのシナリオでサーバー側の自動化が禁止されています。

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

MicrosoftのOpen XML SDKも選択肢の一つです。Excelを必要とせずOOXMLファイル形式に直接アクセスできますが、動作は非常に低レベルで、XML要素を直接操作します。 単一のセル値を読み取るには、共有文字列テーブル、セル参照、およびスタイル インデックスを移動する必要があります。 IronXL はこれらすべてを、このガイド全体にわたって示されている 1 行の 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"]
# 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.ForEach または Task.WhenAll を使用できます。

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

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

プロジェクトでIronXL を検証する最も簡単な方法は、 NuGetパッケージをインストールし、このガイドの例を環境の実際のファイルに対して実行することです。 無料の試用ライセンスでは、実稼働の準備ができたときにコードを変更することなくすべての機能がロック解除されます。

ファイルの読み取りを補完する関連IronXL機能を調べます。

ライセンス、クロスプラットフォーム サポート、または特定のファイル形式の要件に関する質問については、ライブ チャットと電子メールでIronXLサポート チームにお問い合わせください。

今IronXLを始めましょう。
green arrow pointer

よくある質問

Excel をインストールせずに C# で Open Office Excel ファイルを読み取るにはどうすればよいですか?

IronXLライブラリを使用すると、サーバーにExcelをインストールすることなく、C#でOpen Office Excelファイルを読み取ることができます。WorkBook.Loadメソッドを1回呼び出すだけで、XLS、XLSX、ODS、CSVファイルを効率的に読み込むことができます。

IronXLを使用して処理できる Excel ファイルの種類は何ですか?

IronXL は、XLS、XLSX、ODS (OpenDocument スプレッドシート)、CSV ファイルなどのさまざまな Excel ファイル形式の処理をサポートしているため、LibreOffice や OpenOffice などのさまざまなスプレッドシート アプリケーションで汎用的に使用できます。

開発者が Excel ファイルの読み取りに Microsoft Interop ではなくIronXL を使用する必要があるのはなぜですか?

IronXL は、Microsoft Excel や COM Interop を必要とせずに Excel ファイルを処理するためのよりシンプルで効率的な方法を提供し、運用サーバーの複雑さとオーバーヘッドを軽減し、Linux および Docker の展開を可能にします。

IronXL は、MS Excel 以外のスプレッドシート アプリケーションで作成されたファイルを処理できますか?

はい、 IronXL はOpenOffice Calc や LibreOffice Calc などの他のスプレッドシート アプリケーションからファイルを読み取って処理できるため、ODS および ODF 準拠の形式で作業する開発者にとって柔軟なツールになります。

IronXLを使用するには、運用サーバーに Excel をインストールする必要がありますか?

いいえ、 IronXLを使用すると、本番サーバーに Excel をインストールする必要がないため、導入が簡素化され、メンテナンスの負担も軽減されます。IronXLは、Windows、Linux、macOS、そして Docker コンテナ内で動作します。

IronXL はCSV ファイルの処理をサポートしていますか?

はい、 IronXL は同じ WorkBook.Load API を使用して、XLS、XLSX、ODS などの他の Excel 形式とともに CSV ファイルの読み取りと処理を完全にサポートしています。

.NET開発者にとってIronXL を使用する利点は何ですか?

IronXL は、Microsoft Excel を必要とせずに Excel ファイルの読み取り、書き込み、操作を行うための使いやすいライブラリを.NET開発者に提供し、クリーンかつ厳密に型指定された API によって生産性を向上し、開発時間を短縮します。

IronXL はExcel ファイルの処理効率をどのように向上させるのでしょうか?

IronXL は、Excel ソフトウェアの必要性をなくし、型指定されたセル値アクセサー、スレッドセーフな同時処理、および.NETアプリケーション内で直接 Excel ファイルを処理する軽量ソリューションを提供することで効率性を高めます。

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

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