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

{"6":"C#\u3067Excel\u30c7\u30fc\u30bf\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3001\u8aad\u307f\u53d6\u308a\u3001\u64cd\u4f5c\u3059\u308b\u65b9\u6cd5<\/S>"}

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

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

C#で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はプレーンテキストを期待し、これらの複雑な構造を文字として解釈しようとするため、無意味な出力になります。

サンプル入力

C#でExcelデータをインポート、読み取り、操作する方法:画像2 - Excel入力

出力

C#でExcelデータをインポート、読み取り、操作する方法:画像3 - コンソール出力

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

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

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

C#でExcelデータをインポート、読み取り、操作する方法:画像4 - クロスプラットフォーム

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

Install-Package IronXL.Excel

C#で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#でExcelデータをインポート、読み取り、操作する方法:図6 - メモリストリームからExcelを読み取る出力

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

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

C#で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#でExcelデータをインポート、読み取り、操作する方法:図8 - ライセンス

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

よくある質問

StreamReaderがC#でExcelファイルを直接処理できないのはなぜですか?

StreamReaderはテキストファイル用に設計されており、Excelファイルのバイナリ形式をサポートしていないため、それを使用してExcelドキュメントを読み取ると、文字化けや例外に直面する可能性があります。代わりに、適切なExcelファイル処理にはIronXLのようなライブラリの使用がお勧めです。

C#でExcelデータをインポートするための推奨方法は何ですか?

C#でExcelデータをインポートするための推奨方法は、IronXLを使用することです。それにより、Excel InteropなしでExcelファイルを読み取り、操作することができ、より簡単で効率的なソリューションを提供します。

Excel Interopを使わずにC#でExcelファイルを操作できますか?

はい、IronXLを使用することで、Excel InteropなしでC#でExcelファイルを操作できます。これにより、C#アプリケーション内で直接Excelドキュメントを扱うことができます。

Excelファイル処理にIronXLを使用する利点は何ですか?

IronXLはいくつかの利点を持ち、Microsoft ExcelなしでExcelファイルを読み書きする能力、様々なExcel形式をサポートする能力、データ操作タスクを簡素化する強力なAPIを提供しています。

IronXLは複雑なデータ型を持つExcelファイルの読み取りをサポートしていますか?

はい、IronXLは複雑なデータ型を持つExcelファイルの読み取りをサポートしており、C#アプリケーション内で多様なデータ構造を効率的に扱うことができます。

IronXLはC#でのExcelファイル操作をどのように改善しますか?

IronXLは、Excel Interopを必要としない使いやすいインターフェースを提供することでExcelファイル操作プロセスを簡素化し、コードの複雑さを軽減し、パフォーマンスを向上させます。

IronXLを使用して異なる形式のExcelファイルを読み書きすることは可能ですか?

はい、IronXLはXLSX、XLS、CSVなど複数のExcelファイル形式をサポートしており、さまざまな形式でファイルを簡単に読み書きできます。

IronXLは大規模なExcelファイルを効率的に処理できますか?

IronXLは大規模なExcelファイルを効率的に処理できるように設計されており、ファイル操作中のメモリ使用量を最小限に抑えながら堅牢なパフォーマンスを提供します。

IronXLは、Excelファイルを扱うC#開発者にとってどのように適した選択となるのですか?

IronXLは、Microsoft Excelや複雑なインタオップ依存関係を必要とせずに、Excelファイルの読み取り、書き込み、操作を簡単にする包括的な機能セットを提供するため、C#開発者にとって適した選択です。

Curtis Chau
テクニカルライター

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

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