フッターコンテンツにスキップ
IRONXLの使用

C#\u3067Excel\u30c7\u30fc\u30bf\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3001\u8aad\u307f\u53d6\u308a\u3001\u64cd\u4f5c\u3059\u308b\u65b9\u6cd5

StreamReader XLSX/XLS形式は複雑なバイナリまたは圧縮XML構造であり、プレーンテキストではないため、Excelファイルを読み取ることができません。 代わりにIronXLライブラリを使用してください。このライブラリは、Excel Interop に依存することなく、ファイルの読み取りにはWorkBook.Load() 、メモリ ストリーム処理には FromStream() を提供します。

多くの C# 開発者は、Excel シート ファイルを読み込もうとすると共通の課題に直面します。テキスト ファイルでは完璧に動作する信頼できる StreamReader が、 Excel ドキュメントでは不可解に失敗します。 C# で StreamReader を使用して Excel ファイルを読み込もうとした結果、文字化けや例外が発生したという経験があるなら、それはあなただけではありません。 このチュートリアルでは、StreamReader が Excel ファイルを直接処理できない理由を説明し、 Excel Interop を使用せずにIronXL を使用する適切な解決策を示します。

Excel で開くことができるCSV ファイルはStreamReader と問題なく動作するため、混乱が生じることがよくあります。 しかし、真のExcelファイル(XLSX, XLS)は根本的に異なるアプローチが必要です。 この違いを理解することで、デバッグに時間を節約し、タスクに最適なツールを見つける事ができます。 DevOps アプリケーションをDocker コンテナまたはKubernetes 環境にデプロイするエンジニアにとって、ネイティブ依存関係がコンテナ化を複雑にする可能性があるため、これは特に重要になります。

 Microsoft Officeとの相互運用なしでExcelファイルを読み取るC#コード例を表示するIronXL for .NETホームページ。ライブラリ機能とダウンロード統計を紹介しています。

StreamReader が Excel ファイルを読み込めないのはなぜですか?

StreamReader は、プレーンテキストファイル用に設計されており、指定されたエンコーディングを使用して文字データを1行ずつ読み取ります。 Excel ファイルは、表計算ソフトのように見えますが、実際には StreamReader が解釈できない複雑なバイナリまたは ZIP 圧縮された XML 構造です。 最新のXLSXファイルはOffice Open XML標準に準拠していますが、古いXLSファイルは独自のバイナリ形式を使用しています。

static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // Attempts to read Excel as text
    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(); // Attempts to read Excel as text
    Console.WriteLine(content); // Outputs garbled binary data
 }
}
$vbLabelText   $csharpLabel

このコードスニペットを実行すると、スプレッドシートのデータが表示される代わりに、"PK♥♦"などのバイナリデータや類似の文字が表示されます。 XLSXファイルは、複数のXMLファイルを含むZIPアーカイブであり、XLSファイルは独自のバイナリフォーマットを使用します。 StreamReader はプレーンテキストを想定しており、これらの複雑な構造を文字として解釈しようとするため、意味のない出力になります。 コンテナ化されたアプリケーションの場合、ネイティブのExcelライブラリやCOM相互運用機能を使用しようとすると、コンテナ内にMicrosoft Officeをインストールする必要があり、イメージサイズと複雑さが大幅に増加します。

StreamReader が Excel ファイルを処理しようとするとどうなりますか?

以下の例は、処理したい製品データを含む典型的なExcelファイルを示しています。 Excelで表示すると、構造化されたスプレッドシートデータがどのように整理されて見やすく表示されるかに注目してください。

Excel スプレッドシートには、製品名 (ラップトップ、マウス、キーボード、モニター、ヘッドホン)、価格、および列 A から D までの TRUE/FALSE 値の列を含む製品データ テーブルが表示されます。

なぜ出力に文字化けが表示されるのですか?

StreamReader がこの Excel ファイルを処理しようとすると、コンソール出力に根本的な問題が明らかになります。 読み取り可能なデータの代わりにバイナリコンテンツが表示されるのは、ファイル構造がテキストとして解釈できないためです。

Visual Studio デバッグ コンソールで、終了コード 0 でプログラムが正常に実行され、ウィンドウを閉じるために任意のキーを押すように促すメッセージが表示されています

最新のExcelファイル(XLSX)は複数のコンポーネントを含みます:ワークシート、スタイル、共有文字列、関連性など、すべてが一緒にパッケージ化されています。 この複雑さゆえに、Excelファイルの構造を理解する特殊なライブラリが必要となり、そこでIronXLが登場するのです。 このライブラリは、これらの複雑な処理をすべて内部的に処理しつつ、シンプルなAPIを提供するため、手動での介入が不可能な自動デプロイパイプラインに最適です。

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

IronXLは、C#でExcelファイルを読み込むためのシンプルなソリューションを提供します。 StreamReaderとは異なり、 IronXLはExcelの内部構造を理解し、データにアクセスするための直感的な方法を提供します。 このライブラリは、Windows、Linux、macOS 、およびDockerコンテナをサポートしているため、最新のクロスプラットフォームアプリケーションに最適です。 DevOps チームにとって、IronXL のゼロ依存性アーキテクチャは、デプロイ中に管理する必要のあるネイティブライブラリや COM コンポーネントがないことを意味します。

Windows、Linux、macOS、Docker、Azure、AWSなどのさまざまなバージョン、オペレーティングシステム、開発環境、クラウドプラットフォーム間で for .NETの互換性を示すクロスプラットフォームサポート図

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

Install-Package IronXL.Excel

Visual Studio のパッケージ マネージャー コンソールを使用してIronXl.Excel パッケージとその依存関係が正常にインストールされたことを示すターミナル出力

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}");
}
$vbLabelText   $csharpLabel

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

コンテナ化されたデプロイメントの場合、Excelの処理能力を検証するヘルスチェックエンドポイントを簡単に組み込むことができます。

// Health check endpoint for containerized apps
public async Task<IActionResult> HealthCheck()
{
    try
    {
        // Test Excel functionality
        using var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var sheet = workbook.CreateWorkSheet("HealthCheck");
        sheet["A1"].Value = DateTime.UtcNow;

        // Convert to byte array for validation
        var bytes = workbook.ToByteArray();
        return Ok(new { 
            status = "healthy", 
            excelSupport = true,
            timestamp = DateTime.UtcNow 
        });
    }
    catch (Exception ex)
    {
        return StatusCode(503, new { 
            status = "unhealthy", 
            error = ex.Message 
        });
    }
}
// Health check endpoint for containerized apps
public async Task<IActionResult> HealthCheck()
{
    try
    {
        // Test Excel functionality
        using var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var sheet = workbook.CreateWorkSheet("HealthCheck");
        sheet["A1"].Value = DateTime.UtcNow;

        // Convert to byte array for validation
        var bytes = workbook.ToByteArray();
        return Ok(new { 
            status = "healthy", 
            excelSupport = true,
            timestamp = DateTime.UtcNow 
        });
    }
    catch (Exception ex)
    {
        return StatusCode(503, new { 
            status = "unhealthy", 
            error = ex.Message 
        });
    }
}
$vbLabelText   $csharpLabel

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

実際のアプリケーションでは、ディスクファイルではなくストリームからExcelファイルを処理する必要があることが多いです。 一般的なシナリオとしては、Webアップロードの処理、データベースからのファイルの取得、 AWS S3Azure Blob Storageなどのクラウドストレージからのデータ処理などが挙げられます。 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 DataTable
    var dataTable = worksheet.ToDataTable(false);
    // Display 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 DataTable
    var dataTable = worksheet.ToDataTable(false);
    // Display DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
$vbLabelText   $csharpLabel

FromStream メソッドは、FileStream、またはネットワーク ストリームなど、あらゆるストリーム タイプを受け入れます。 この柔軟性により、さまざまなソースからの Excel ファイルを、最初にディスクに保存することなく処理できます。また、この例では、ワークシートのデータを DataTable に変換する方法も示しており、データベースやデータバインディングのシナリオとシームレスに統合できます。 マイクロサービスアーキテクチャの場合、このストリームベースのアプローチはディスクI/Oを最小限に抑え、パフォーマンスを向上させます。

メモリストリーム処理はどのような結果を生み出すのか?

Visual Studio デバッグ コンソールに Excel データの読み込みの出力が表示され、

Excelの読み込みシナリオでオブジェクト送信機能を使うべきなのはどのような場合ですか?

このコードがイベント駆動プログラミング内で使用される場合(たとえば、Windows Forms またはASP.NETでファイルアップロードボタンを処理する場合)、メソッドのシグネチャにはオブジェクト送信者や EventArgs e などのパラメーターが含まれることがよくあります。 このコンテキストは、Excelの処理ロジックが正しくUIまたはサービスのイベントに関連付けられることを保証します。 コンテナ化されたAPIの場合、HTTPリクエストから直接アップロードを処理することができます。

[HttpPost("upload")]
public async Task<IActionResult> ProcessExcelUpload(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0;

    var workbook = WorkBook.FromStream(stream);
    var worksheet = workbook.DefaultWorkSheet;

    // Process and return results
    var data = worksheet.ToDataSet();
    return Ok(new { 
        sheets = workbook.WorkSheets.Count,
        rows = worksheet.RowCount,
        processed = DateTime.UtcNow
    });
}
[HttpPost("upload")]
public async Task<IActionResult> ProcessExcelUpload(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0;

    var workbook = WorkBook.FromStream(stream);
    var worksheet = workbook.DefaultWorkSheet;

    // Process and return results
    var data = worksheet.ToDataSet();
    return Ok(new { 
        sheets = workbook.WorkSheets.Count,
        rows = worksheet.RowCount,
        processed = DateTime.UtcNow
    });
}
$vbLabelText   $csharpLabel

C# 用 Excel 操作ライブラリの機能概要。作成、保存とエクスポート、ワークブックの編集、データの操作、ワークブックの保護という 6 つの主要カテゴリと、各カテゴリの詳細な機能一覧を示します。

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

StreamReader は CSV ファイルを処理できますが、 Excel 形式と CSV 形式の間で変換する必要がある場合がよくあります。 IronXL はこの変換を簡単に行えるようにしており、特に ETL パイプラインやワークフローでよく見られるデータ統合シナリオに役立ちます。

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");
$vbLabelText   $csharpLabel

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

自動化されたデータパイプラインの場合、 JSONまたはXML形式でエクスポートすることもできます。

// Export Excel to multiple formats for data pipelines
var workbook = WorkBook.Load("report.xlsx");

// Export to JSON for API responses
string jsonData = workbook.ToJson();

// Export to HTML for web display
workbook.SaveAsHtml("report.html");

// Export to XML for integration systems
workbook.SaveAsXml("report.xml");

// Export specific range to DataTable for database insertion
var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable();
// Export Excel to multiple formats for data pipelines
var workbook = WorkBook.Load("report.xlsx");

// Export to JSON for API responses
string jsonData = workbook.ToJson();

// Export to HTML for web display
workbook.SaveAsHtml("report.html");

// Export to XML for integration systems
workbook.SaveAsXml("report.xml");

// Export specific range to DataTable for database insertion
var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable();
$vbLabelText   $csharpLabel

コンテナ導入のベストプラクティス

DevOps Excel 処理アプリケーションを導入するエンジニアにとって、 IronXL はいくつかの利点を提供します。 以下は、Excel処理に最適化された、本番環境に対応したDockerfileです。

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# Install any required system fonts for Excel rendering
RUN apt-get update && apt-get install -y \
    fontconfig \
    libfreetype6 \
    && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# Set environment variables for IronXL
ENV IRONXL_LICENSE_KEY=${IRONXL_LICENSE_KEY}
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

ENTRYPOINT ["dotnet", "YourApp.dll"]

このDockerfileは、最小限の依存関係でExcel処理アプリケーションがコンテナ内でスムーズに動作することを保証します。 ライセンスは環境変数を通じて管理されるため、異なる展開環境間でも容易に管理できます。

C#でExcel処理を行うための次のステップは何ですか?

StreamReader が Excel ファイルを処理できないのは、プレーンテキストと Excel の複雑なファイル構造との根本的な違いに起因します。 StreamReader は CSV やその他のテキスト形式では完璧に機能しますが、真の Excel ファイルでは、内部のバイナリ構造と XML 構造を理解するIronXLのような専用ライブラリが必要です。

IronXLは、直感的なAPI、幅広いフォーマットサポート、そしてシームレスなストリーム処理機能を備えた包括的なソリューションを提供します。 ウェブアプリケーション、デスクトップソフトウェア、クラウドサービスなど、どのようなアプリケーションを開発する場合でも、 IronXLはあらゆるプラットフォームでExcelファイルを確実に処理します。 このライブラリは、条件付き書式設定グラフ数式、および高度なExcel機能をサポートしているため、Enterpriseアプリケーションのための包括的なソリューションとなっています。

DevOps チームにとって、IronXL のコンテナ対応アーキテクチャ、最小限のシステム依存関係、そして堅牢なパフォーマンス特性は、最新のクラウドネイティブアプリケーションにとって理想的な選択肢となります。 このライブラリは水平スケーリングをサポートし、 Kubernetesポッド内でシームレスに動作し、CI/CDパイプラインとの統合性にも優れています。

IronXL licensing page showing four pricing tiers (Lite, Plus, Professional, and Unlimited) with a toggle between IronXL and Iron Suite options, displaying perpetual license prices ranging from $749 to $3,999

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ファイルを読み書きすることは可能ですか?

{"text":"\u306f\u3044\u3001IronXL\u306fXLSX\u3001XLS\u3001CSV\u306a\u3069\u306e\u8907\u6570\u306eExcel\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u3055\u307e\u3056\u307e\u306a\u5f62\u5f0f\u3067\u7c21\u5358\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u66f8\u304d\u3067\u304d\u307e\u3059\u3002"}

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

IronXLは、Excelファイルの効率的な処理を目的として設計されており、ファイル操作中のパフォーマンスを強化し、メモリ使用量を最小限に抑えます。

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

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

カーティス・チャウ
テクニカルライター

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね