IRONSOFTWAREHOME
IRONXLの使用

StreamReader の代わりに C# で Excel ファイルを読み取る方法

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

多くのC#開発者がExcelファイルで作業する際に、StreamReaderクラスにフラストレーションを感じる課題に直面します。このクラスはテキストファイルを確実に処理しますが、Excelドキュメントを指定したときに完全に失敗します。 C#でStreamReaderを使用してExcelファイルを読み込もうとし、文字化けやバイナリノイズ、予期しない例外を目にした場合、あなたは良い仲間にいます。 このガイドでは、StreamReaderがExcelファイルを処理できない理由を正確に説明し、Excelのインストールを必要としない.NET用の専用ExcelライブラリIronXLを使用して問題を正しく解決する方法を示します。

CSVファイルはExcelで開いたり保存したりできるため、StreamReaderで問題なく動作することが多いです。 真のExcelファイル(XLSX、XLS、XLSM)には、根本的に異なるアプローチが必要です。 この違いを理解することで、デバッグに費やす時間を大幅に節約でき、適切なツールを選択できるようになります。

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 1 - IronXL

StreamReaderがExcelファイルを読めない理由は?

StreamReaderはテキストベースのリーダーです。 指定されたエンコーディング(UTF-8、ASCIIなど)を使用して文字データを1行ずつ読み込み、バイナリ構造や圧縮アーカイブについては認識しません。 公式 for .NET StreamReaderドキュメントには、このクラスは文字エンコードされたテキスト専用に設計されていることが明記されています。 Excelファイルは、見た目は単純なスプレッドシートに見えますが、実際には複雑なバイナリまたはZIP圧縮されたXML構造であり、StreamReaderは解釈できません。

XLSXファイルをStreamReaderで開くと、本質的にZIPアーカイブをプレーンテキストとして読み取ろうとしていることになります。 その結果、スプレッドシートのデータではなく、バイナリノイズの羅列が生成されます。

// This code will NOT work -- demonstrates the problem
using StreamReader reader = new StreamReader("ProductData.xlsx");
string content = reader.ReadLine();
Console.WriteLine(content); // Outputs garbled binary data like "PK♥♦"

このスニペットを実行すると、スプレッドシートの行が表示される代わりに、PK♥♦などのバイナリ文字または同様のノイズが表示されます。これは以下の理由で発生します:

  • XLSXファイルは、ワークシート、スタイル、共有文字列、リレーションシップなど、複数のXMLファイルを含むZIPアーカイブです。 Open XML SDKのドキュメントには、この構造の詳細な解説が記載されています。
  • XLSファイルは独自のバイナリ形式(BIFF - バイナリ交換ファイル形式)を使用します。
  • StreamReaderは読み取った任意のバイトに文字エンコーディングを適用し、両形式にとって意味のない出力を生成します。

サンプル入力

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 2 - Excel入力

StreamReader使用時の出力が文字化けする

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 3 - コンソール出力

CSVは機能するのにXLSXは機能しない理由

CSV(カンマ区切り値)はプレーンテキスト形式です。 各行はテキストの1行を表し、各列はカンマで区切られています。 StreamReaderは、バイナリデータや圧縮アーカイブを含まないため、CSVファイルを問題なく読み取ります。 XLSXは根本的に異なり、メタデータ、テーマ、スタイル定義とともに、複数のXMLドキュメントをZIPコンテナ内にパッケージ化します。 単純に一行ずつ読むことは不可能だ。

この違いは、工具を選ぶ際に重要になります。 CSVファイルには、File.ReadAllLinesが完全に適しています。 真のExcelワークブックを作成するには、構造レベルでフォーマットを理解するライブラリが必要です。

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

IronXLは、Microsoft ExcelがインストールされていなくてもExcelファイルの読み書きや作成ができる.NETライブラリです。 XLSX、XLS、XLSM、CSV、TSV形式をサポートし、Windows、Linux、macOS、およびDockerコンテナ上で動作します。

IronXLをインストールするには、 NuGetパッケージマネージャーコンソールまたは.NET CLIのいずれかを使用してください。 このパッケージはNuGetにIronXLとして公開されています。

PM > Install-Package IronXL.Excel

インストール後、using IronXL;ディレクティブをファイルに追加し、Excelドキュメントと作業する準備が整います。

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 5 - インストール

詳細なインストール手順および NuGet の設定オプションについては、IronXL NuGet インストールガイドを参照してください。 無料トライアルライセンスをご利用いただけますので、ご購入前にプロジェクトでIronXLを評価できます。

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 4 - クロスプラットフォーム

IronXLでExcelファイルを読み込むにはどうすればよいですか?

IronXLは、C#でExcelファイルを読み込むための直感的なAPIを提供します。 StreamReaderとは異なり、IronXLはExcelの内部構造を理解し、行、列、セルの値にクリーンにアクセスできます。 IronXLのドキュメントには、サポートされているすべての操作に関する完全なAPIリファレンスが記載されています。

以下は、IronXLを使用してトップレベルのステートメントでExcelファイルを読み込む方法です:

using IronXL;

// Load the Excel file from disk
WorkBook workbook = WorkBook.Load("ProductData.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Read a specific cell by address
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");

// Iterate over a range of cells
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Read a numeric value
decimal price = worksheet["B2"].DecimalValue;
Console.WriteLine($"Price: {price:C}");

WorkBook.Loadメソッドは、ファイル形式(XLSX、XLS、XLSM、CSV)を自動的に検出し、すべての複雑な解析を処理します。 セルには"A1:C10"のような範囲を使用してアクセスすることができ、スプレッドシートに詳しい人には直ちに読みやすいコードになります。

複数のワークシートへのアクセス

多くのワークブックには複数のシートが含まれています。 IronXL を使用するとワークシートを完全に列挙しながらワークブックを開き、操作することができます:

using IronXL;

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

// List all worksheets
foreach (WorkSheet sheet in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {sheet.Name}, Rows: {sheet.RowCount}");
}

// Access a sheet by name
WorkSheet summary = workbook.GetWorkSheet("Summary");
string totalRevenue = summary["B20"].StringValue;
Console.WriteLine($"Total Revenue: {totalRevenue}");

// Access a sheet by index
WorkSheet firstSheet = workbook.WorkSheets[0];
int lastRow = firstSheet.RowCount;
Console.WriteLine($"Last row in first sheet: {lastRow}");

このアプローチは、StreamReaderや文字列操作でExcelを解析しようとする試みよりもはるかにクリーンです。

メモリ ストリームから Excel データを読み込むにはどうすればよいですか?

実際のアプリケーションでは、ディスクファイルではなくストリームからExcelファイルを処理する必要があることが多いです。 一般的なシナリオとしては、Webフォームからのファイルアップロードの処理、データベースのBLOB列からのワークブックの取得、クラウドストレージ(Azure Blob Storage、AWS S3)からダウンロードしたファイルの処理などが挙げられます。 IronXLはこれらのシナリオをWorkBook.FromStreamを通じて処理します:

using IronXL;
using System.IO;

// Simulate reading file bytes (e.g., from a database or web upload)
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");

using MemoryStream stream = new MemoryStream(fileBytes);
WorkBook workbook = WorkBook.FromStream(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Get row and column counts
Console.WriteLine($"Rows: {worksheet.RowCount}, Columns: {worksheet.ColumnCount}");

// Convert to DataTable for database or grid binding
var dataTable = worksheet.ToDataTable(useHeaderRow: true);
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");

foreach (System.Data.DataRow row in dataTable.Rows)
{
    string productName = row["ProductName"]?.ToString() ?? string.Empty;
    string sku = row["SKU"]?.ToString() ?? string.Empty;
    Console.WriteLine($"Product: {productName}, SKU: {sku}");
}

Stream -- FileStream、またはネットワークストリームを受け付けます。 この柔軟性のおかげで、Excelデータを読み込むためだけに一時ファイルをディスクに書き込む必要は一切なくなります。 SqlBulkCopy、データバインディング制御、およびレポートフレームワークと直接統合されます。

ストリーム処理からの出力

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 6 - メモリーストリーム出力からExcelを読み取る

イベント駆動型Excel読み取りは、どのような場合に使用すべきですか?

イベント駆動型のアーキテクチャでは、例えばWindows FormsのファイルアップロードボタンやASP.NETコントローラアクションでは、メソッドシグネチャにEventArgs eパラメータが含まれることがよくあります。 Excel処理ロジックは引き続き同じIronXL APIを使用しますが、トップレベルのステートメントではなく、イベントハンドラ内から呼び出されます。 IronXLはUIスレッドに依存しないため、あらゆるイベント駆動型または非同期型のワークフローにスムーズに統合できます。

C#でStreamReaderを使用してExcelファイルを読むための代替 - IronXL: Image 7 - 機能

Excel形式とCSV形式の間でデータを変換するにはどうすればよいですか?

StreamReaderはCSVファイルを処理できますが、実運用アプリケーションではしばしばExcelとCSVの間でデータを移動する必要があります。IronXLはフォーマット変換を簡単にします。 わずか数行のコードで、ExcelデータをCSVにエクスポートしたりCSVデータをワークブックにインポートしたりできます:

using IronXL;

// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
workbook.SaveAsCsv("output.csv");

// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("legacy-report.csv");
csvWorkbook.SaveAs("converted.xlsx");

// Export a specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("sheet1-export.csv");

これらの変換処理は、コンテナ形式を変更しながらデータを保持します。 IronXLはExcelをCSVに変換する際、デフォルトで最初のワークシートをエクスポートします。 任意のシートを指定できます。 CSVをExcelに変換すると、適切に構造化されたワークブックが作成され、そのワークブックに対して書式設定を行ったり、数式を追加したり、追加のデータを入力したりすることができます。

フォーマットのサポート状況の違いは何ですか?

StreamReaderとIronXLによる様々なファイル形式の読み込みの比較
ファイル形式StreamReaderIronXL注意事項
CSVファイル(.csv)はいはいプレーンテキスト; StreamReader は正常に動作します
XLSX (.xlsx)なしはいZIP圧縮されたXMLファイル。ライブラリが必要です。
XLS (.xls)なしはいバイナリBIFF形式。ライブラリが必要です。
XLSM (.xlsm)なしはいマクロ有効ワークブック
TSV (.tsv)はいはいタブ区切りのプレーンテキスト

IronXLを使ってExcelファイルを作成・フォーマットするにはどうすればよいですか?

Excelデータの読み込みは、ワークフローの一部に過ぎません。 また、多くのアプリケーションでは、新しいExcelファイルを作成し、書式設定を適用する必要があります。 IronXLは、フォント、色、枠線、数値形式、セルの結合などのセル書式設定をサポートしています:

using IronXL;

// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");

// Write headers with formatting
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";

// Apply bold formatting to header row
sheet["A1:C1"].Style.Font.Bold = true;
sheet["A1:C1"].Style.SetBackgroundColor("#4472C4");
sheet["A1:C1"].Style.Font.Color = "#FFFFFF";

// Write data rows
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] units = { 120, 85, 210 };
decimal[] revenues = { 2400.00m, 1700.00m, 4200.00m };

for (int i = 0; i < products.Length; i++)
{
    sheet[$"A{i + 2}"].Value = products[i];
    sheet[$"B{i + 2}"].Value = units[i];
    sheet[$"C{i + 2}"].Value = revenues[i];
    sheet[$"C{i + 2}"].FormatString = "$#,##0.00";
}

// Save the workbook
workbook.SaveAs("FormattedReport.xlsx");
Console.WriteLine("Report created successfully.");

既存のワークブックを読み込む機能と、新しいフォーマット済みファイルを作成する機能の両方を備えているため、 IronXLは.NETアプリケーション向けの完全なExcelソリューションと言えます。 サポートされている操作の詳細については、 IronXLの機能一覧ページをご覧ください。

データを他の形式にエクスポートする

IronXLは、ワークブックデータをDataSetオブジェクトにエクスポートする機能もサポートしています。これは、シート間の計算やデータベースへの一括挿入操作のために、複数のワークシートをメモリに読み込む際に特に役立ちます。 DataSetを返します。

IronXLを本番環境に導入する際のライセンス取得と展開方法は?

IronXLは開発およびテスト目的では無料で利用できます。 実運用で使用する場合は、ライセンスが必要です。 IronXLのライセンスオプションについては、製品ページをご覧ください。導入要件に応じて、開発者、チーム、組織の各ティアが用意されています。

購入後、 IronXLの呼び出しを行う前に、コードにライセンスキーを適用してください。

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

あるいは、デプロイ環境にIRONXL_LICENSE_KEY環境変数を設定すると、IronXLは自動的にそれを拾います。 これは、コンテナ化されたデプロイメント(Docker、Kubernetes)や、キーをハードコーディングすることが許容されないクラウド環境において推奨されるアプローチです。

評価目的であれば、無料トライアルライセンスで全ての機能をご利用いただけるため、購入を決定する前に、お客様固有のワークロードに対してIronXLの性能を検証できます。 クレジットカード不要で無料トライアルを利用でき、すぐに有効になります。

Microsoft.Office.Interop.Excelなどの代替製品と比較して、 IronXLにはいくつかの導入上の利点があります。

  • サーバーにMicrosoft Excelをインストールする必要はありません LinuxおよびDockerとの互換性 - クラウドネイティブアプリケーションにとって不可欠 COMオブジェクトのライフサイクル管理やアパートメントのスレッド処理に関する問題はありません。
  • サーバー環境における起動速度の向上とメモリ使用量の削減
  • サポートされているすべてのプラットフォームで一貫した動作

これらの特長により、 IronXLは、オンプレミス環境でもクラウド環境でも、本番環境でExcelファイルを処理する必要のあるあらゆる.NETアプリケーションにとって、実用的な選択肢となります。

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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。