IRONSOFTWAREHOME
USING IRONXL

在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式

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

对于EnterpriseWeb 应用程序而言,实现电子表格导出功能是一个常见的需求,然而手动生成和交付这些文件的过程往往会引入相当大的技术复杂性。 开发人员必须经常了解 MemoryStream 管理的细微差别,并配置精确的 HTTP 内容处置标头,以确保浏览器行为的一致性并防止数据损坏。

本文将逐一介绍如何使用IronXL库在ASP.NET C# MVC控制器中创建和下载Excel文件所需的一切。 我们将介绍如何将数据导出为XLSX格式的 Excel 文件、如何流式传输CSV文件、如何转换上传文件以便重新导出,以及如何将下载的文件返回到浏览器,所有这些操作都无需安装 Microsoft Office 或依赖 Excel Interop。安装IronXL NuGet包开始免费试用,即可跟随源代码示例进行学习。

NuGet使用 NuGet 安装

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文件的核心模式涉及三个步骤:创建工作簿,将其写入流,并将流作为文件响应返回。 以下代码展示了一个完整的 MVC 控制器操作,该操作从头开始构建XLSX文件并将其推送到浏览器。

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,这告诉浏览器下载文件而不是尝试渲染它。 第三个参数控制文件名在用户下载对话框中的显示方式。

这种公共 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文件的输出

在生产环境中,订单数组将来自 Entity Framework Core 查询、 Dapper调用或任何通过连接字符串连接到数据库的数据访问层。 循环遍历结果,并将每个值写入工作表中的正确单元格。 请注意字符串文件名中包含日期戳,这个小细节可以避免用户重复下载文件时出现麻烦。

IronXL 的单元格寻址系统(worksheet[$"A{row}"])保持了内容的可读性,而WorkBook API则在内部处理了构建有效XLSX文件的所有繁重工作。 对于涉及公式、样式或多工作表工作簿的更复杂场景,同样的方法也能很好地扩展。

如何将数据下载为CSV文件而不是XLSX文件?

有时,轻量级的CSV文件是更好的选择,尤其是在将数据导入其他系统、数据库或工具时,这些系统、数据库或工具并不需要 Excel 文件IronXL丰富的功能。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 - 数据作为CSV文件下载,而不是Excel

ToCsvStream 方法将第一个工作表导出为CSV格式的MemoryStream 。CSV文件非常适合数据交换,但它们会去除所有格式、公式和多工作表结构。 当您需要这些功能时,请使用XLSX文件格式,并通过 ToStream() 或ToXlsxStream()进行转换。 要深入了解格式转换,请参阅电子表格转换指南

如何将上传的文件重新导出为其他格式?

常见的 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() 生成一个干净的新 MemoryStream,采用现代XLSX格式,每个字节都结构正确。 这有助于在进一步处理或存储之前对用户提交的内容进行规范化。

支持导出哪些文件格式?

IronXL支持将数据导出为多种电子表格和数据交换格式。 下表总结了可用的输出选项及其最佳用途。

|翻译格式| 文件扩展名 | 流方法 | 最佳用例 | |---|---|---|---| |XLSX|.xlsx|ToXlsxStream()| 带有格式和公式的现代Excel电子表格 | |XLS|.xls|ToXlsStream()| 旧系统兼容性 | |CSV|.csv|ToCsvStream()| 数据库导入、数据管道、轻量级导出 | |XML|.xml|ToXmlStream()| Enterprise系统集成 | |JSON|.json|SaveAsJson()| Web API 响应和数据交换 | |HTML|.html|ExportToHtml()| 网页上显示电子表格数据 |

每个流方法都会返回一个 MemoryStream,该 MemoryStream 可以直接插入ASP.NET Core 的 File() 返回辅助函数。 在某些情况下,例如保存到 blob 数据库或附加到电子邮件响应流时,byte[] 更方便,也可以使用字节数组替代方案 (ToByteArray())。 安装IronXL NuGet包后,所有这些方法都可以立即使用。 有关每种导出格式的完整说明,请参阅导出到 Excel 文档

无论目标是为业务分析师下载XLSX格式的文件,为数据工程师导出CSV文件,还是为Enterprise集成生成 XML, IronXL都能在.NET Core和.NET Framework应用程序中保持代码的简洁性和输出的可靠性。 准备好在下一个项目中交付电子表格导出文件了吗? 立即获取免费试用许可证了解许可选项,开始使用。 有关分步设置说明,请参阅IronXL入门指南

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

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

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户