IRONSOFTWAREHOME
IRONXLの使用

ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

スプレッドシートのエクスポート機能を実装することは、EnterpriseWebアプリケーションにおいて一般的な要件ですが、これらのファイルを生成して配信する手作業のプロセスは、しばしば大きな技術的な複雑さを伴います。 開発者は、ブラウザの一貫した動作を確保し、データの破損を防ぐために、MemoryStream管理の微妙な点を理解し、正確なHTTPコンテンツ配置ヘッダーを設定する必要がある。

このアーティクルでは、IronXLライブラリを使用してASP .NET C# MVCコントローラーでExcelファイルを作成し、ダウンロードするのに必要なすべてを案内します。 本稿では、Microsoft Officeをインストールしたり、Excel Interopに頼ったりすることなく、データをXLSX形式のExcelファイルにエクスポートする方法、CSVファイルをストリーミングする方法、アップロードしたデータを再エクスポート用に変換する方法、ダウンロードしたファイルをブラウザに返す方法などを解説します。IronXL IronXLNuGetをインストールし、無料トライアルを開始して、ソースコードの例を実際に試してみてください。

NuGetNuGetでインストール

PM > Install-Package IronXL.Excel

Install IronXL by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

コントローラーからExcelファイルを作成してダウンロードする方法は?

ASP.NET CoreでExcelファイルをダウンロードするための基本パターンは、ワークブックを作成し、ストリームに書き込み、ファイル応答としてストリームを返す3つのステップを含みます。 以下のコードは、XLSXファイルをゼロから作成し、ブラウザに送信する完全なMVCコントローラアクションを示しています。

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
    // Export employee data as a downloadable Excel file
    public IActionResult DownloadExcel()
    {
        // Create a new workbook and worksheet
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Employees");
        // Add header row with column names
        worksheet["A1"].Value = "Name";
        worksheet["B1"].Value = "Department";
        worksheet["C1"].Value = "Salary";
        // Populate cells with data values
        worksheet["A2"].Value = "Alice Torres";
        worksheet["B2"].Value = "Engineering";
        worksheet["C2"].Value = 95000;
        worksheet["A3"].Value = "James Park";
        worksheet["B3"].Value = "Marketing";
        worksheet["C3"].Value = 78000;
        // Export workbook to a MemoryStream for download
        var stream = workbook.ToStream();
        string filename = "Employees.xlsx";
        var content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        // Return file to the browser with content disposition attachment
        return File(stream, content, filename);
    }
}

出力Excelファイル

 ASP .NET C# で Excel ファイルをダウンロード: データを XLSX、CSV などにエクスポート: 画像 1 - ASP .NET C# で Excel ファイルをダウンロードする例の出力

WorkBook.Create メソッドは新しい Excel ドキュメントを生成し、CreateWorkSheet メソッドは最初のワークシートをそのドキュメントに追加します。 セルに値を入力した後、 ToStreamメソッドはワークブック全体を MemoryStream に変換します。一時ファイルはディスクに書き込まれません。 コントローラの File() メソッドは、コンテンツディスポジション ヘッダーを attachment に設定します。これにより、ブラウザはファイルをレンダリングしようとするのではなく、ダウンロードするように指示されます。 3番目のパラメータは、ユーザーのダウンロードダイアログに表示されるファイル名を制御します。

このパブリックな IActionResult パターンは、.NET FrameworkとASP.NET Coreプロジェクトの両方で機能するため、データを Excel にエクスポートする必要がある Web アプリケーションにとって最適なアプローチとなっています。

データベースデータをダウンロード可能なスプレッドシートにエクスポートする方法は?

実際のシナリオのほとんどは、ハードコードされた値ではなく、データベーステーブルからデータをエクスポートすることを伴います。 処理手順は変わりません。データを照会し、ワークシートにデータを入力し、ファイルを返します。以下は、データベースからレコードを取得し、Excelドキュメントに書き込む処理をシミュレートした例です。

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class DataExportController : Controller
{
    // Export database records to an xlsx file for download
    public IActionResult ExportDatabaseReport()
    {
        // Simulate a database query returning order records
        var orders = new[]
        {
            new { OrderId = 1001, Customer = "Acme Corp", Total = 4500.00m },
            new { OrderId = 1002, Customer = "Globex Inc", Total = 12300.50m },
            new { OrderId = 1003, Customer = "Initech LLC", Total = 890.75m },
        };
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Orders");
        // Write headers
        worksheet["A1"].Value = "Order ID";
        worksheet["B1"].Value = "Customer";
        worksheet["C1"].Value = "Total";
        // Write each row of data from the query results
        for (int i = 0; i < orders.Length; i++)
        {
            int row = i + 2;
            worksheet[$"A{row}"].Value = orders[i].OrderId;
            worksheet[$"B{row}"].Value = orders[i].Customer;
            worksheet[$"C{row}"].Value = orders[i].Total;
        }
        var stream = workbook.ToStream();
        string filename = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx";
        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
    }
}

出力

 ASP .NET C# で Excel ファイルをダウンロード: データを XLSX、CSV などにエクスポート: 画像 2 - データベースから Excel ファイルへのデータエクスポートの出力

本番環境では、orders配列はEntity Framework Coreクエリ、 Dapper呼び出し、または接続文字列を介してデータベースに接続された任意のデータアクセス層から取得されます。 このループは結果を繰り返し処理し、それぞれの値をワークシート上の適切なセルに書き込みます。 ファイル名に日付スタンプが含まれている点に注目してください。これはユーザーがファイルを繰り返しダウンロードする際に発生する問題を回避できる、ちょっとした工夫です。

IronXLのセルアドレス指定システム(worksheet[$"A{row}"])は読みやすさを維持し、 WorkBook APIは有効なXLSXファイルを作成するための面倒な処理をすべて内部的に行います。 数式、スタイル設定、複数シートのワークブックなどを含むより複雑なシナリオでも、同じアプローチが問題なく適用できます。

データをXLSXファイルではなくCSVファイルとしてダウンロードするにはどうすればよいですか?

軽量なCSVファイルの方が適している場合もあります。特に、本格的なExcelファイルのような豊富な機能を必要としない他のシステム、データベース、ツールにデータを取り込む場合はなおさらです。IronXLを使えば、フォーマットの切り替えは非常に簡単です。

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
    // Export data as aCSVfile download
    public IActionResult ExportCsv()
    {
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Products");
        worksheet["A1"].Value = "SKU";
        worksheet["B1"].Value = "Product";
        worksheet["C1"].Value = "Price";
        worksheet["A2"].Value = "WDG-001";
        worksheet["B2"].Value = "Widget Pro";
        worksheet["C2"].Value = 29.99;
        // Convert toCSVstream instead of XLSX
        var stream = workbook.ToCsvStream();
        string filename = "Products.csv";
        return File(stream, "text/csv", filename);
    }
}

出力CSVファイル

 ASP .NET C# で Excel ファイルをダウンロード: データを XLSX、CSV などにエクスポート: 画像 3 - Excel の代わりにCSVファイルとしてデータをダウンロード

ToCsvStream メソッドは、最初のワークシートをCSV形式のMemoryStreamとしてエクスポートします。 CSVファイルはデータ交換には非常に便利ですが、書式設定、数式、複数シート構造などはすべて削除されてしまいます。 これらの機能が必要な場合は、ToStream() またはToXlsxStream()を使用してXLSXファイル形式を使用してください。 フォーマット変換の詳細については、スプレッドシート変換ガイドを参照してください。

アップロードしたファイルを別の形式で再エクスポートする方法は?

一般的なWebアプリケーションのシナリオとしては、ユーザーからアップロードされたファイルを受け取り、別の形式でエクスポートすることが挙げられます。例えば、XLS形式のファイルをXLSX形式に変換したり、従来形式で保存されたワークブックからCSVファイルを作成したりといった具合です。

public IActionResult ConvertUpload(IFormFile upload)
{
    using var memoryStream = new MemoryStream();
    upload.CopyTo(memoryStream);
    memoryStream.Position = 0;
    // Load uploaded Excel file from the stream
    var workbook = WorkBook.Load(memoryStream);
    // Re-export asXLSXregardless of the original file extension or file type
    var stream = workbook.ToXlsxStream();
    string filename = Path.GetFileNameWithoutExtension(upload.FileName) + ".xlsx";
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}

出力: CSVをXLSX形式に変換

 ASP .NET C# で Excel ファイルをダウンロード: データを XLSX、CSV などにエクスポート: 画像 4 -CSVファイルをXLSX形式に変換する例の出力

WorkBook.Loadメソッドは MemoryStream を受け入れるため、アップロードしたファイルを事前にディスクに保存する必要はありません。ソースが XLS、XLSX、またはCSVファイルであるかを自動的に検出し、それに応じて解析します。 そこから、ToXlsxStream() は、すべてのバイトが適切に構造化された、最新のXLSX形式のクリーンな新しい MemoryStream を生成します。 これは、ユーザーからの送信データを、さらなる処理や保存の前に正規化するのに役立ちます。

エクスポート可能なファイル形式はどれですか?

IronXLは、複数のスプレッドシート形式およびデータ交換形式へのデータエクスポートをサポートしています。 以下の表は、利用可能な出力オプションとその最適な用途をまとめたものです。

|形式| ファイル拡張子 | ストリームメソッド | 最適な使用例 | |---|---|---|---| |XLSX|.xlsx|ToXlsxStream()| 書式設定と数式を備えた最新のExcelスプレッドシート | |XLS|.xls|ToXlsStream()| レガシーシステムとの互換性 | |CSV|.csv|ToCsvStream()| データベースインポート、データパイプライン、軽量エクスポート | |XML|.xml|ToXmlStream()| Enterpriseシステム統合 | |JSON|.json|SaveAsJson()| Web APIの応答とデータ交換 | |HTML|.html| ExportToHml() | スプレッドシートデータのウェブページ表示 |

すべてのストリームメソッドは、 ASP.NET CoreのFile()戻り値ヘルパーに直接接続できるMemoryStreamを返します。 バイト配列を使用する代替手段(ToByteArray())も利用可能です。これは、例えばブロブデータベースに保存する場合や、電子メールの応答ストリームに添付する場合など、バイト配列の方が便利なシナリオで使用できます。 これらのメソッドはすべて、 IronXL NuGetパッケージをインストールした直後から利用可能です。 各エクスポート形式の詳細な手順については、 Excelへのエクスポートに関するドキュメントを参照してください。

ビジネスアナリスト向けにXLSX形式でファイルをダウンロードする場合でも、データエンジニア向けにCSVファイルをエクスポートする場合でも、Enterprise統合向けにXMLを生成する場合でも、 IronXLは.NET Coreおよび.NET Frameworkアプリケーション全体でコードをクリーンに保ち、出力の信頼性を確保します。 次のプロジェクトでスプレッドシートのエクスポート機能を導入する準備はできていますか? 無料トライアルライセンスを取得するか、ライセンスオプションを確認して、今すぐ始めましょう。 詳しいセットアップ手順については、 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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。