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

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

スプレッドシートのエクスポート機能を実装することは、エンタープライズ Web アプリケーションに共通の要件ですが、これらのファイルを生成して配信する手動のプロセスにより、多くの場合、かなりの技術的複雑さが生じます。 開発者は、一貫したブラウザ動作を確保し、データの破損を防ぐために、MemoryStream 管理の微妙な違いを頻繁に把握し、正確な HTTP コンテンツ配置ヘッダーを構成する必要があります。

この記事では、 IronXLライブラリを使用して ASP .NET C# MVC コントローラーで Excel ファイルを作成し、ダウンロードするために必要なすべての手順を説明します。 XLSX形式のExcelファイルへのデータエクスポート、CSVファイルのストリーミング、アップロードデータの変換と再エクスポート、そしてダウンロードしたファイルをブラウザに返す方法を解説します。これらはすべて、Microsoft OfficeのインストールやExcel Interopへの依存なしに実行できます。IronXL IronXLNuGetをインストールして無料トライアルを開始し、ソースコード例に沿って操作してみてください。

NuGet 購入の準備ができていませんか?

PM >  Install-Package IronXl.Excel

IronXLNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 また、DLLをダウンロードできます。

コントローラーから 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);
    }
}
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);
    }
}
$vbLabelText   $csharpLabel

Excelファイルを出力する

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

WorkBook.Create メソッドは新しい Excel ドキュメントを生成し、CreateWorkSheet はそれに最初のワークシートを追加します。 セルに値を入力した後、 ToStreamメソッドはブック全体を MemoryStream に変換します。一時ファイルはディスクに保存されません。 コントローラーの File() 戻りメソッドは、コンテンツ配置ヘッダーを添付ファイルに設定し、ブラウザーにファイルをレンダリングするのではなくダウンロードするように指示します。 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);
    }
}
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);
    }
}
$vbLabelText   $csharpLabel

出力

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

運用環境では、注文配列は、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 a CSV file 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 to CSV stream instead of XLSX
        var stream = workbook.ToCsvStream();
        string filename = "Products.csv";
        return File(stream, "text/csv", filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
    // Export data as a CSV file 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 to CSV stream instead of XLSX
        var stream = workbook.ToCsvStream();
        string filename = "Products.csv";
        return File(stream, "text/csv", filename);
    }
}
$vbLabelText   $csharpLabel

出力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 as XLSX regardless 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);
}
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 as XLSX regardless 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);
}
$vbLabelText   $csharpLabel

出力: 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() | エンタープライズシステム統合 | | JSON | .json | SaveAsJson() | Web APIの応答とデータ交換 | | HTML | .html | HTMLにエクスポート() | スプレッドシートデータのWebページ表示 |

すべてのストリーム メソッドは、 ASP.NET Core の File() 戻りヘルパーに直接プラグインする MemoryStream を返します。 byte[] がより便利なシナリオでは、たとえば BLOB データベースに保存する場合や電子メール応答ストリームに添付する場合など、バイト配列の代替 (ToByteArray()) も使用できます。 これらの方法はすべて、 IronXL NuGetパッケージをインストールするとすぐに利用できるようになります。 各エクスポート形式の完全なチュートリアルについては、 Excel へのエクスポートのドキュメントを参照してください。

ビジネス アナリスト向けに XLSX 形式のファイルをダウンロードする、データ エンジニア向けに CSV ファイルをエクスポートする、エンタープライズ統合用に XML を生成するなど、どのような目的であっても、 IronXL は.NET Coreおよび.NET Frameworkアプリケーション全体でコードをクリーンに保ち、出力の信頼性を確保します。 次のプロジェクトでスプレッドシートのエクスポートを出荷する準備はできていますか? 無料の試用ライセンスを入手するか、ライセンス オプションを調べて今すぐ始めましょう。 詳細なセットアップ手順については、 IronXLスタートガイドを参照してください。

よくある質問

C# を使用してASP.NET Coreで Excel ファイルをダウンロードするにはどうすればよいですか?

IronXLを利用することで、C# を使ってASP.NET Coreから Excel ファイルをダウンロードできます。IronXLを使用すると、MVC コントローラーから XLSX、CSV、XML などの様々な形式に直接データをエクスポートできます。これは、MemoryStream と File() メソッドを使用することで効率的に管理できます。

Excel ファイルをエクスポートするためにIronXLを使用する利点は何ですか?

IronXLは、MemoryStreamを効果的に管理し、HTTPコンテンツ配置ヘッダーを設定することで、Excelファイルのエクスポートプロセスを簡素化します。ブラウザの動作の一貫性を確保し、データの破損を防ぐため、エンタープライズWebアプリケーションに最適です。

IronXLはどのファイル形式にデータをエクスポートできますか?

IronXLは、XLSX、CSV、XMLなど、複数のファイル形式にデータをエクスポートできます。この汎用性により、開発者はさまざまなデータエクスポート要件をシームレスに処理できます。

Excel ファイルをエクスポートするときに、 IronXL はどのような技術的な課題を克服するのに役立ちますか?

IronXLは、MemoryStream管理や正確なHTTPコンテンツ配置ヘッダーの設定といった課題の解決に役立ちます。これらの機能により、エクスポートされたExcelファイルがブラウザで正しく処理され、データの破損を防ぐことができます。

IronXL はMVC コントローラーからデータをエクスポートするために使用できますか?

はい、 IronXLはMVCコントローラーからデータをエクスポートするために使用できます。Excel形式でデータを出力するための簡単な方法を提供するため、 ASP.NET Core Webアプリケーションにとって実用的な選択肢となります。

IronXL はExcel ファイルの生成プロセスをどのように改善しますか?

IronXL は、MemoryStream や HTTP ヘッダー管理などの複雑なタスクを自動化することでプロセスを改善し、開発者が技術的な複雑さではなくコア機能に集中できるようにします。

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

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

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me