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

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

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

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

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

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

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

StreamReaderはプレーンテキストファイル用に設計されており、指定されたエンコーディングを使用して文字データを行ごとに読み取ります。 Excel ファイルは、スプレッドシートのように見えますが、実際には複雑なバイナリまたは ZIP 圧縮された XML 構造であり、StreamReader では解釈できません。 最新の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 Interop を使用しようとすると、コンテナーに Microsoft Office をインストールする必要があり、イメージのサイズと複雑さが大幅に増加します。

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

次の例は、処理する製品データを含む一般的な Excel ファイルを示しています。 構造化されたスプレッドシートのデータが Excel で表示されると、きれいに整理されて表示されることに注目してください。

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

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

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

! Visual Studio デバッグ コンソールに、終了コード 0 でプログラムの実行が成功したことと、ウィンドウを閉じるために任意のキーを押すように求めるプロンプトが表示されています。

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

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

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

! Windows、Linux、macOS、Docker、Azure、AWS などのさまざまなバージョン、オペレーティング システム、開発環境、クラウド プラットフォーム間での .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

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

メモリ ストリーム処理ではどのような結果が生成されますか?

! Visual Studio デバッグ コンソールに Excel データの読み取り出力が表示され、"ワークシートには 5 行あります"と"5 行のデータを読み込んでいます"と表示されています

Excel 読み取りシナリオでオブジェクト センダーを使用する必要があるのはいつですか?

このコードがイベント駆動型プログラミング内で使用される場合 (たとえば、Windows フォームまたはASP.NETでファイル アップロード ボタンを処理する場合)、メソッド シグネチャには多くの場合、オブジェクト センダーやEventArgsなどのパラメーターが含まれます。 このコンテキストは、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 を使用すると、この変換が簡単になり、 DevOpsワークフローで一般的な 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

これらの変換は、ファイル形式を変更しながらデータを保護します。 Excel を CSV に変換する場合、IronXL はデフォルトで最初のワークシートをフラット化しますが、エクスポートするワークシートを指定できます。 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

コンテナ展開のベストプラクティス

Excel 処理アプリケーションを導入するDevOpsエンジニアにとって、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、広範な形式のサポート、シームレスなストリーム処理機能を備えた包括的なソリューションを提供します。 Web アプリケーション、デスクトップ ソフトウェア、クラウド サービスなどを構築する場合でも、IronXL はすべてのプラットフォームで Excel ファイルを確実に処理します。 このライブラリは条件付き書式グラフ数式高度な Excel 機能をサポートしており、エンタープライズ アプリケーション向けの完全なソリューションとなっています。

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

! IronXL ライセンス ページには、4 つの価格帯 (Lite、Plus、Professional、Unlimited) が表示され、IronXL と Iron Suite のオプションを切り替えることができます。永久ライセンスの価格は 749 ドルから 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ボットを作成したりして、技術に対する愛情と創造性を組み合わせています。