"},スプレッドシートデータの可視化,Office Interop なしの Excel,ExcelとSQL Serverの統合"> フッターコンテンツにスキップ
IRONXLの使用

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

多くのC#開発者は、Excelシートファイルを読み取ろうとする際に共通の問題に直面します。テキストファイルには完璧に動作する信頼のStreamReaderが、Excelドキュメントでは謎のエラーを起こします。 C#でStreamReaderを使ってExcelファイルを読み取ろうと試みた際に、文字化けや例外が発生した場合、あなたは一人ではありません。 このチュートリアルでは、StreamReaderがExcelファイルを直接扱えない理由を解説し、Excel Interopを使わずIronXLを使用した適切な解決策を示します。

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

VB.NET で DataGridView を Excel にエクスポートする方法:図 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
 }
}
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
 }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

サンプル入力

VB.NET で DataGridView を Excel にエクスポートする方法:図 2 - Excel 入力

出力

VB.NET で DataGridView を Excel にエクスポートする方法:図 3 - コンソール出力

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

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

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

C# で StreamReader を使って Excel ファイルを読む方法:図 4 - クロスプラットフォーム

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

Install-Package IronXL.Excel

C# で StreamReader を使って Excel ファイルを読む方法:図 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}");
}
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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードはあなたの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");
}
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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

出力

C# で StreamReader を使って Excel ファイルを読む方法:図 6 - MemoryStream から読み込む Excel 出力

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

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

C# で StreamReader を使って Excel ファイルを読む方法:図 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");
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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

結論

StreamReaderがExcelファイルを処理できないのは、プレーンテキストとExcelの複雑なファイル構造の基本的な違いに起因します。 StreamReaderはCSVおよびその他のテキスト形式に対して完璧に動作しますが、真のExcelファイルはバイナリおよびXML構造を理解する特殊なライブラリであるIronXLが必要です。

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

C# で StreamReader を使って Excel ファイルを読む方法:図 8 - ライセンシング

Excelファイルを適切に扱い始める準備はできていますか? あなたのプロジェクトのニーズに最適なIronXLの無料トライアルをダウンロード

よくある質問

なぜStreamReaderはC#でExcelファイルを読み取れないのですか?

StreamReaderはテキストファイルの読み取りを目的として設計されており、Excelファイルのバイナリ形式を処理する能力がないため、文字化けや例外を引き起こします。

IronXLとは何ですか?

IronXLは、ExcelInteropなしで開発者がExcelファイルの読み取り、書き込み、操作を行えるC#のライブラリであり、より効率的で信頼性の高いソリューションを提供します。

IronXLはどのようにC#でのExcelファイルの読み取りを改善するのですか?

IronXLは、複雑なインタロップコードを必要とせず、ファイル形式の複雑さを扱うことなく、Excelデータにアクセスする方法を提供することで、Excelファイルの読み取りプロセスを簡素化します。

ExcelをインストールせずにIronXLを使用してExcelファイルを読み取ることができますか?

はい、IronXLはMicrosoft Excelがあなたのシステムにインストールされている必要がなく、C#内でExcelファイルを処理するためのスタンドアロンのソリューションです。

Excel InteropよりもIronXLを使用する利点は何ですか?

IronXLはより高速で、Excelのインストールが不要であり、Excel Interopで一般的なバージョン互換性の問題のリスクを軽減します。

IronXLは大規模なExcelファイルに適していますか?

はい、IronXLはパフォーマンスに最適化されており、大規模なExcelファイルを効率的に処理できるため、大量のデータを扱うアプリケーションに適しています。

IronXLは.xlsおよび.xlsx形式の両方の読み取りをサポートしていますか?

IronXLは.xlsおよび.xlsx形式の両方をサポートしており、開発者が様々なExcelファイルタイプをシームレスに扱うことを可能にします。

C#プロジェクトでIronXLを使い始めるにはどうすればよいですか?

NuGetパッケージマネージャーを介してVisual Studioにインストールし、C#プロジェクトに統合してExcelファイルを読み取り、操作することでIronXLを使い始めることができます。

IronXLの一般的な用途は何ですか?

IronXLの一般的な用途には、Excelファイルからのデータ抽出、レポート作成、データ操作、C#アプリケーションでのExcel関連タスクの自動化が含まれます。

IronXLはWebアプリケーションで使用できますか?

はい、IronXLはデスクトップおよびWebアプリケーションの両方で使用でき、プロジェクトにおけるExcel処理能力の実装において柔軟性を提供します。

Curtis Chau
テクニカルライター

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

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