IRONSOFTWAREHOME
IRONXLの使用

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

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

StreamReader はExcelファイルを読み取れません。なぜならそれはプレーンテキスト用に設計されており、Excelファイルは複雑なバイナリまたはZIP圧縮されたXML構造だからです。 IronXLライブラリを使用してください。これはWorkBook.Load()を提供し、Excel Interopへの依存なしでExcelファイルを正しく読み取ります。

多くのC#開発者はExcelシートファイルを読み取る際に共通の課題に直面します。それは、テキストファイルで完璧に動作する信頼のあるStreamReaderが、Excelドキュメントでは謎の失敗をすることです。 もしC#でStreamReaderを使ってExcelファイルを読み取ることを試み、文字化けや例外を見てしまったなら、あなた一人ではありません。 このチュートリアルは、なぜStreamReaderが直接Excelファイルを扱えないのかを説明し、IronXLを使用した適切な解決策を示します。また、Excel Interopを使用せずに行います。

混乱は多くの場合、Excelが開くことができるCSVファイルではStreamReaderが問題なく動作するために生じます。 しかし、真のExcelファイル(XLSX、XLS)には、根本的に異なるアプローチが必要です。 この違いを理解することで、デバッグに時間を節約し、タスクに最適なツールを見つける事ができます。 コンテナ環境においては、適切なライブラリを選択することが、デプロイメントの簡素化と複雑な依存関係の回避に不可欠です。

IronXL for .NETのホームページでの、Microsoft Office interopを使用せずにExcelファイルを読み取るC#コード例を示し、ライブラリの特徴やダウンロード統計を紹介

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

StreamReaderはプレーンテキストファイル用に設計され、指定されたエンコーディングを使って文字データを行ごとに読み取ります。 Excelファイルは、スプレッドシートのように見えるにもかかわらず、実際には複雑なバイナリまたはZIP圧縮されたXML構造で、StreamReaderはこれを解釈できません。 この基本的な違いにより、StreamReaderは生産環境でのExcelワークブックの処理に適していません。

using System;
using System.IO;

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

このコードスニペットを実行すると、スプレッドシートのデータが表示される代わりに、"PK♥♦"などのバイナリ文字や類似の記号が表示されます。 これは、 XLSXファイルが複数のXMLファイルを含むZIPアーカイブであるのに対し、XLSファイルは独自のバイナリ形式を使用しているためです。 StreamReaderはプレーンテキストを期待し、これらの複雑な構造を文字として解釈しようとするため、意味のない出力になります。 コンテナ化されたアプリケーションの場合、このバイナリデータはエンコードの問題や予期しないクラッシュを引き起こす可能性もあります。

StreamReaderがExcelファイルを読み取るとどうなるか?

現代のExcelワークブックの内部構造は、複数のコンポーネントがパッケージ化されて構成されている。 StreamReaderがこれらのファイルに遭遇すると、ワークブックのメタデータを解析できず、ファイル構造をナビゲートできません。 その代わりに、生のバイト列をテキストとして読み取ろうとするため、データの破損や損失につながる。 これは、ファイル処理の信頼性が求められる自動化されたデプロイメントパイプラインにおいて特に問題となる。

製品名(ラップトップ、マウス、キーボード、モニター、ヘッドフォン)、価格、および列DのTRUE/FALSE値を含む、製品データの列を持つExcelスプレッドシート

なぜ出力が文字化けした状態で表示されるのですか?

文字化け出力が発生するのは、Excelファイルにバイナリヘッダー、圧縮アルゴリズム、XML名前空間が含まれており、StreamReaderがそれらをテキスト文字として解釈するためです。 これらの複雑なファイル構造には、書式情報、数式、および意味のあるテキスト表現を持たないセル参照が含まれています。 DevOpsチームは、エンコーディングの違いにより問題を悪化させる可能性のあるLinuxコンテナでExcelファイルを処理しようとする際にこの問題に遭遇することがよくあります。

StreamReaderを使用してExcelファイルを読み取ろうとしたときに発生するVisual Studioデバッグコンソールウィンドウに表示された壊れたテキスト出力、エグジットコード0

最新のExcelファイル(XLSX)には、ワークシートスタイル共有文字列、リレーションシップなど、複数のコンポーネントがまとめてパッケージ化されています。 この複雑さゆえに、Excelファイルの構造を理解する特殊なライブラリが必要となり、そこでIronXLが登場するのです。 Kubernetesのようなコンテナオーケストレーションプラットフォームは、外部依存関係を必要とせずにこれらの複雑さを処理するライブラリの恩恵を受ける。

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

IronXLは、C#でExcelファイルを読み込むためのシンプルなソリューションを提供します。 StreamReaderとは異なり、IronXLはExcelの内部構造を理解しており、データにアクセスするための直感的な方法を提供します。 このライブラリは、WindowsLinuxmacOS 、およびDockerコンテナをサポートしているため、最新のクロスプラットフォームアプリケーションに最適です。 その軽量性と最小限の依存関係により、コンテナ化されたデプロイメントに最適です。

Windows、Linux、macOS、Docker、Azure、およびAWS環境全体で for .NET互換性を示すクロスプラットフォームサポート図

コンテナ環境にIronXLをインストールするにはどうすればよいですか?

まず、 NuGetパッケージマネージャーを使用してIronXLをインストールしてください。 このライブラリはコンテナ対応設計を採用しているため、DockerおよびKubernetes環境とのスムーズな統合が保証されます。 追加のシステム依存関係やネイティブライブラリは不要で、デプロイメントパイプラインが簡素化されます。

PM > Install-Package IronXL.Excel

Dockerデプロイメントの場合、 IronXLをDockerfileに直接含めることもできます。

# Add to your Dockerfile
RUN dotnet add package IronXL.Excel --version 2024.12.5
Text

すべての依存関係を伴うIronXL.Excel NuGetパッケージバージョン2024.12.5の成功裏にインストールされたことを示すターミナル出力

Excelデータを読み込むための基本的なコードパターンは何ですか?

本番環境に適した包括的なエラー処理機能を備え、 Excelファイルを正しく読み込む方法をご紹介します。

using IronXL;
using System;
using System.Linq;

class ExcelReader
{
    public static void ReadExcelData(string filePath)
    {
        try
        {
            // Load the Excel file
            WorkBook workbook = WorkBook.Load(filePath);
            WorkSheet worksheet = workbook.DefaultWorkSheet;
            
            // Read specific cell values with null checking
            var cellA1 = worksheet["A1"];
            if (cellA1 != null)
            {
                string cellValue = cellA1.StringValue;
                Console.WriteLine($"Cell A1 contains: {cellValue}");
            }
            
            // Read a range of cells with LINQ
            var range = worksheet["A1:C5"];
            var nonEmptyCells = range.Where(cell => !cell.IsEmpty);
            
            foreach (var cell in nonEmptyCells)
            {
                Console.WriteLine($"{cell.AddressString}: {cell.Text}");
            }
            
            // Get row and column counts for validation
            int rowCount = worksheet.RowCount;
            int columnCount = worksheet.ColumnCount;
            Console.WriteLine($"Worksheet dimensions: {rowCount} rows × {columnCount} columns");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error reading Excel file: {ex.Message}");
            // Log to your monitoring system
        }
    }
}

このコードはExcelファイルを正常に読み込み、セル値へのクリーンなアクセスを提供します。 WorkBook.Load メソッドは、ファイル形式 ( XLSXXLSXLSMCSV ) を自動的に検出し、複雑な解析処理をすべて内部的に行います。 "A1"のようなおなじみのExcel表記や、"A1:C5"のような範囲指定を使ってセルにアクセスできるため、Excelに慣れている人なら誰でも直感的にコードを読むことができます。 エラー処理により、不正なファイルによってコンテナがクラッシュするのを防ぎます。

IronXLはコンテナ化されたデプロイメントにおいて、どのファイル形式をサポートしていますか?

IronXLは、Microsoft OfficeやInteropアセンブリを必要とせずに主要なExcel形式すべてをサポートしているため、コンテナ化された環境に最適です。 1Dバーコード: Code128, Code39, Code93, Codabar, ITF, MSI, Plessey, UPCA, UPCE, EAN8, EAN13

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

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

using IronXL;
using System.IO;
using System.Data;
using System.Threading.Tasks;

public class StreamProcessor
{
    // Async method for container health checks
    public async Task<bool> ProcessExcelStreamAsync(byte[] fileBytes)
    {
        try
        {
            using (MemoryStream stream = new MemoryStream(fileBytes))
            {
                // Load from stream asynchronously
                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 DataTable for database operations
                var dataTable = worksheet.ToDataTable(true); // true = use first row as headers
                
                // Validate data integrity
                if (dataTable.Rows.Count == 0)
                {
                    Console.WriteLine("Warning: No data rows found");
                    return false;
                }
                
                Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
                Console.WriteLine($"Columns: {string.Join(", ", dataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName))}");
                
                // Example: Process data for container metrics
                foreach (DataRow row in dataTable.Rows)
                {
                    // Your processing logic here
                    await ProcessRowAsync(row);
                }
                
                return true;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Stream processing error: {ex.Message}");
            return false;
        }
    }
    
    private async Task ProcessRowAsync(DataRow row)
    {
        // Simulate async processing
        await Task.Delay(10);
    }
}

WorkBook.FromStreamメソッドは、FileStream、またはネットワークストリームであろうと、任意のストリームタイプを受け入れます。 この柔軟性により、さまざまなソースからの Excel ファイルを、最初にディスクに保存することなく処理できます。この例では、ワークシートのデータを DataTable に変換する方法も示しており、データベースやデータバインディングのシナリオとシームレスに統合できます。 図示された非同期パターンは、コンテナの健全性チェックや準備状況の調査に最適です。

Excel処理でサポートされているストリームの種類は何ですか?

IronXLはすべて for .NETストリームタイプをサポートしているため、さまざまな展開シナリオに対応できる汎用性を備えています。

ワークシートからロードされた5行のExcelファイル読み取り成功を示すVisual Studioデバッグ出力

コンテナ化されたアプリケーションでストリーム処理を使用すべきタイミングはいつですか?

ストリーム処理は特に以下の分野で有効です。

-マイクロサービス:永続ストレージなしでファイルを処理する -サーバーレス関数AWS LambdaまたはAzure Functions

  • APIエンドポイント:直接ファイルアップロード処理 -メッセージキュー:キューからのExcel添付ファイルの処理

IronXLの特徴概要を示す6つの主要カテゴリー:作成、保存とエクスポート、ワークブックの編集、データの操作、ワークブックの保護、さまざまなExcel操作機能

ストリーム処理はコンテナのリソース使用量にどのような影響を与えますか?

IronXLによるストリーム処理は、メモリ使用量を最小限に抑え、コンテナ環境向けに最適化されています。 このライブラリは、メモリリークを防ぎ、ガベージコレクションの負荷を軽減する効率的なメモリ管理技術を採用しています。 IronXLは、大容量のExcelファイルの場合、構成設定を通じてメモリ使用量を制御するオプションを提供するため、リソースに制約のあるコンテナに適しています。

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

一方、StreamReaderCSVファイルを扱うことができますが、ExcelとCSVのフォーマットを変換することがしばしば必要です。 IronXLは、本番環境向けに最適化された組み込みメソッドにより、この変換を容易にします。

using IronXL;
using System;
using System.IO;

public class FormatConverter
{
    public static void ConvertExcelFormats()
    {
        try
        {
            // Load an Excel file and save as CSV with options
            WorkBook workbook = WorkBook.Load("data.xlsx");
            
            // Save with UTF-8 encoding for international character support
            workbook.SaveAsCsv("output.csv", ";"); // Use semicolon as delimiter
            
            // Load a CSV file with custom settings
            WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv", ",", "UTF-8");
            csvWorkbook.SaveAs("output.xlsx", FileFormat.XLSX);
            
            // Export specific worksheet to CSV
            if (workbook.WorkSheets.Count > 0)
            {
                WorkSheet worksheet = workbook.WorkSheets[0];
                worksheet.SaveAsCsv("worksheet1.csv");
                
                // Advanced: Export only specific range
                var dataRange = worksheet["A1:D100"];
                // Process range data before export
                foreach (var cell in dataRange)
                {
                    if (cell.IsNumeric)
                    {
                        // Apply formatting for CSV output
                        cell.FormatString = "0.00";
                    }
                }
            }
            
            Console.WriteLine("Conversion completed successfully");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Conversion error: {ex.Message}");
            throw; // Re-throw for container orchestrator handling
        }
    }
}

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

なぜDevOpsチームはExcelからCSVへの変換が必要なのか?

DevOpsチームは、ExcelからCSVへの変換を必要とすることがよくあります。

-データパイプライン統合:多くのETLツールはCSV形式を推奨しています -バージョン管理:CSVファイルはテキストベースで、差分比較に適しています -データベースインポートSQLデータベースへのデータの一括ロード -ログ分析Excelレポートを解析可能な形式に変換する -構成管理構成データにExcelを使用する

フォーマット変換がパフォーマンスに及ぼす影響は何ですか?

IronXLによるフォーマット変換は、以下のコンテナ化環境向けに最適化されています。

-ストリーミング変換:大容量ファイルをメモリに完全に読み込むことなく処理します。 -並列処理:マルチコアを活用して変換処理を高速化 -ディスクI/Oを最小限に抑える:インメモリ処理によりストレージ要件が削減されます -リソース制限Kubernetesデプロイメントのメモリ上限を構成可能

これらの最適化により、コンテナは大きなExcelファイルを処理する場合でも、一貫したパフォーマンスを維持します。 このライブラリの効率的なメモリ管理により、リソースが限られた環境におけるメモリ不足エラー(OOMエラー)を防ぐことができます。

結論

StreamReaderがExcelファイルを処理できないのは、プレーンテキストとExcelの複雑なファイル構造の基本的な違いに起因します。 一方、StreamReaderはCSVや他のテキスト形式に対しては完璧に機能しますが、真のExcelファイルには、内部のバイナリやXML構造を理解する DevOpsチームがコンテナ化アプリケーションを管理する場合、適切なライブラリを選択することは、信頼できるデプロイメントパイプラインを維持するために重要です。

IronXLは、直感的なAPI、包括的なフォーマットサポート、そしてシームレスなストリーム処理機能を備えた、洗練されたソリューションを提供します。 ウェブアプリケーション、デスクトップソフトウェア、クラウドサービスなど、どのようなアプリケーションを構築する場合でも、 IronXLはあらゆるプラットフォームでExcelファイルを確実に処理します。 コンテナ対応の設計、最小限の依存関係、優れたにより、現代のDevOpsワークフローに最適な選択肢です。

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