IRONSOFTWAREHOME
IRONXLの使用

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

Curtis Chau
Curtis Chau
Updated: 2026年1月5日

多くのC#開発者はExcelシートファイルを読み込もうとする際に共通の課題に直面します: テキストファイルで完全に動作するStreamReaderが、Excel文書では謎のエラーを起こします。 C#でStreamReaderを使用してExcelファイルを読み込もうとした際に文字化けや例外が発生した場合、あなた一人ではありません。 このチュートリアルでは、なぜStreamReaderが直接Excelファイルを扱えないのかを説明し、Excel Interopを使用せずにIronXLを使用した適切な解決策を示します。

混乱はしばしば、Excelが開けるCSVファイルがStreamReaderで正常に動作することから生じます。 しかし、真のExcelファイル(XLSX, XLS)は根本的に異なるアプローチが必要です。 この違いを理解することで、デバッグに時間を節約し、タスクに最適なツールを見つける事ができます。

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像1 - IronXL

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

StreamReaderはプレーンテキストファイル用に設計されており、指定されたエンコーディングで文字データを行ごとに読み取ります。 Excelファイルはスプレッドシートの外観にもかかわらず、実際にはStreamReaderが解釈できない複雑なバイナリまたはZIP圧縮されたXML構造です。

static void Main(string[] args)
{
    // This code will NOT work - demonstrates the problem
    using (StreamReader reader = new StreamReader("ProductData.xlsx"))
    {
        string content = reader.ReadLine(); // read data
        Console.WriteLine(content); // Outputs garbled binary data
    }
}

このプログラムのクラスコードスニペットを実行すると、スプレッドシートデータを見る代わりに、"PK♥♦"などのバイナリの未知データや類似のシステム文字が表示されます。 XLSXファイルは、複数のXMLファイルを含むZIPアーカイブであり、XLSファイルは独自のバイナリフォーマットを使用します。 StreamReaderはプレーンテキストを期待してこれらの複雑な構造を文字として解釈しようとするため、意味のない出力になります。

サンプル入力

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像2 - Excel入力

出力

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像3 - コンソール出力

最新のExcelファイル(XLSX)は複数のコンポーネントを含みます:ワークシート、スタイル、共有文字列、関連性など、すべてが一緒にパッケージ化されています。 この複雑さは、Excelファイル構造を理解する専門的なライブラリが必要であり、それがIronXLにつながります。

IronXLでExcelファイルを読み取る方法は?

IronXLは、C#でExcelファイルを読み込むための簡単なソリューションを提供します。 StreamReaderとは異なり、IronXLはExcelの内部構造を理解しており、データにアクセスするための直感的なメソッドを提供します。 ライブラリはWindows、Linux、macOS、およびDockerコンテナをサポートしており、現代のクロスプラットフォームアプリケーションに最適です。

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

まず、NuGetパッケージマネージャーを介してIronXLをインストールします:

PM > Install-Package IronXL.Excel

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像5 - インストール

適切にExcelファイルを読み取る方法は以下の通りです:

using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

このコードはあなたのExcelファイルを成功裏に読み込み、セルの値にアクセスできるようにします。 WorkBook.Loadメソッドはファイル形式(XLSX、XLS、XLSM、CSV)を自動的に検出し、すべての複雑な解析を内部で処理します。 "A1"や"A1:C5"のようなExcelに馴染みのある表記を使用してセルにアクセスでき、Excelに詳しい人には直感的なコードになります。

メモリストリームからExcelを読み取る方法?

実際のアプリケーションでは、ディスクファイルではなくストリームからExcelファイルを処理する必要があることが多いです。 一般的なシナリオには、Webアップロードの処理、データベースからのファイルの取得、クラウドストレージからのデータの処理が含まれます。 IronXLはこれらの状況をエレガントに処理します:

using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a new DataTable, return dt
    var dataTable = worksheet.ToDataTable(false);
    // Return DataTable row count
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}

FileStream、ネットワークストリームなど、あらゆるストリームタイプを受け入れます。 これにより、Excelファイルをディスクに保存することなく、さまざまなソースから処理する柔軟性が可能になります。この例では、ワークシートデータをデータテーブルに変換することもデモしており、データベースやデータバインディングシナリオとシームレスに統合されます。

出力

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像6 - MemoryStream出力からExcelを読み取る

データを読み取るためにobject senderを使用するタイミング?

このコードがイベント駆動型プログラミング内で使用される場合(例えば、Windows FormsやASP.NETでのファイルアップロードボタン処理)、一つのメソッドシグネチャにはEventArgs eといったパラメーターが含まれることがよくあります。 このコンテキストは、Excelの処理ロジックが正しくUIまたはサービスのイベントに関連付けられることを保証します。

C#でStreamReaderを使用してExcelファイルを読む代替手段 - IronXL: 画像7 - 機能

ExcelとCSVの間で変換する方法?

StreamReaderはCSVファイルを扱える一方、ExcelとCSVフォーマット間で変換する必要がよくあります。 IronXLはこの変換を簡単にします:

using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");

これらの変換は、ファイル形式を変更しながらデータを保護します。 ExcelをCSVに変換する際、IronXLはデフォルトで最初のワークシートをフラット化しますが、エクスポートするワークシートを指定することもできます。 CSVからExcelへの変換は、データ型を保持し、今後のフォーマットおよび数式の追加を可能にする適切にフォーマットされたスプレッドシートを作成します。

結論

StreamReaderがExcelファイルを処理できない理由は、プレーンテキストとExcelの複雑なファイル構造の根本的な違いにあります。 StreamReaderはCSVや他のテキストフォーマットで完璧に動作する一方、真のExcelファイルはその中のバイナリおよびXML構造を理解するIronXLのような専門のライブラリを必要とします。

IronXLは直感的なAPI、包括的な形式サポート、シームレスなストリーム処理機能を備えたエレガントな解決策を提供します。 ウェブアプリケーション、デスクトップソフトウェア、クラウドサービスの構築に関わらず、IronXLはすべてのプラットフォームでExcelファイルを確実に処理します。

Excelファイルを適切に扱い始める準備はできていますか? IronXLの無料トライアルをダウンロードし、C#アプリケーションでのExcel処理を体験してください。 本番環境への導入については、プロジェクトのニーズに最適なIronXLライセンスオプションをご検討ください。

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