MVC怎么下载Excel文件?asp.net mvc导出excel乱码

在 ASP.NET MVC 中下载 Excel 文件通常有几种常见方式,以下我将介绍 最常用且推荐 的两种方法:

  1. 使用 FileResult 直接返回字节数组或文件路径(适用于已生成的 Excel 文件)
  2. 使用 NPOI 或 EPPlus 动态生成 Excel 并返回(适用于从数据库数据动态生成)

✅ 方法一:返回已存在的 Excel 文件(最简单)

假设你的 Excel 文件已经保存在服务器某个路径下,/Content/Reports/report.xlsx

【2023年全网首套完整版教程】.NET5+NPOI操作Excel导入导出+序列化 | 附完整源码(.NET5/.NET6/.NET/NPOI)B0558
加载中
【2023年全网首套完整版教程】.NET5+NPOI操作Excel导入导出+序列化 | 附完整源码(.NET5/.NET6/.NET/NPOI)B0558

Controller 代码:

using System.IO;
using System.Web.Mvc;
public class DownloadController : Controller
{
    public ActionResult DownloadExcel()
    {
        string filePath = Server.MapPath("~/Content/Reports/report.xlsx");
        if (!System.IO.File.Exists(filePath))
        {
            return HttpNotFound();
        }
        // 返回文件下载
        return File(filePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
    }
}

前端链接:

<a href="@Url.Action("DownloadExcel", "Download")">下载 Excel</a>

✅ 方法二:动态生成 Excel 并返回(推荐用于数据导出)

使用 NPOI 库(免费、支持 .xlsx.xls)来动态生成 Excel 文件。

安装 NPOI NuGet 包

Install-Package NPOI

Controller 代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Web.Mvc;
using

MVC怎么下载Excel文件?asp.net mvc导出excel乱码

NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public class ExportController : Controller { public ActionResult ExportToExcel() { // 模拟数据 var dataList = new List<ExportData> { new ExportData { Name = "张三", Age = 25, City = "北京" }, new ExportData { Name = "李四", Age = 30, City = "上海" }, new ExportData { Name = "王五", Age = 28, City = "广州" } }; // 创建 Excel 工作簿 IWorkbook workbook = new XSSFWorkbook(); // .xlsx 格式 ISheet sheet = workbook.CreateSheet("数据表"); // 创建表头 IRow headerRow = sheet.CreateRow(0); headerRow.CreateCell(0).SetCellValue("姓名"); headerRow.CreateCell(1).SetCellValue("年龄"); headerRow.CreateCell(2).SetCellValue("城市"); // 填充数据 for (int i = 0; i < dataList.Count; i++) { IRow dataRow = sheet.CreateRow(i + 1); dataRow.CreateCell(0).SetCellValue(dataList[i].Name); dataRow.CreateCell(1).SetCellValue(dataList[i].Age); dataRow.CreateCell(2).SetCellValue(dataList[i].City); } // 将工作簿写入内存流 using (var memoryStream = new MemoryStream()) { workbook.Write(memoryStream); memoryStream.Position = 0; // 返回文件下载 return File( memoryStream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "导出数据.xlsx" ); } } } // 数据模型 public class ExportData { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }

MVC怎么下载Excel文件?asp.net mvc导出excel乱码

前端链接:

<a href="@Url.Action("ExportToExcel", "Export")">导出 Excel</a>

✅ 方法三:使用 EPPlus(更强大的 Excel 操作库)

EPPlus 功能更强大,支持样式、图表等,但注意 EPPlus 5+ 需要商业许可证,4.x 版本免费。

安装:

Install-Package EPPlus -Version 4.5.3.3

Controller 代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Web.Mvc;
using OfficeOpenXml;
public class ExportController : Controller
{
    public ActionResult ExportWithEPPlus()
    {
        var dataList = new List<ExportData>
        {
            new ExportData { Name = "张三", Age = 25, City = "北京" },
            new ExportData { Name = "李四", Age = 30, City = "上海" },
            new ExportData { Name = "王五", Age = 28, City = "广州" }
        };
        // 设置 EPPlus 许可证上下文(必须)
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        using (var package = new ExcelPackage())
        {
            var worksheet = package.Workbook.Worksheets.Add("数据表");
            // 写入表头
            worksheet.Cells[1, 1].Value = "姓名";
            worksheet.Cells[1, 2].Value = "年龄";
            worksheet.Cells[1, 3].Value = "城市";
            // 写入数据
            for (int i = 0; i < dataList.Count; i++)
            {
    

MVC怎么下载Excel文件?asp.net mvc导出excel乱码

worksheet.Cells[i + 2, 1].Value = dataList[i].Name; worksheet.Cells[i + 2, 2].Value = dataList[i].Age; worksheet.Cells[i + 2, 3].Value = dataList[i].City; } // 返回文件 var bytes = package.GetAsByteArray(); return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "导出数据.xlsx"); } } }

📌 注意事项

项目 说明
MIME 类型 .xlsx 使用 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
大文件处理 如果数据量很大,建议使用流式写入,避免内存溢出
中文文件名 确保文件名编码正确,必要时使用 HttpUtility.UrlEncode
权限问题 确保网站有权限读取服务器文件路径
NPOI vs EPPlus NPOI 免费且轻量;EPPlus 功能更强但需注意许可证

🎯 总结推荐

  • 简单文件下载 → 使用 File(filePath, mimeType, fileName)
  • 动态生成 Excel → 推荐使用 NPOI(免费、稳定)或 EPPlus(功能强大)
  • 大数据量 → 考虑使用 ClosedXML 或流式写入

如有具体场景(如从数据库导出、带样式、分页等),可以告诉我,我会提供更详细的代码示例。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/486074.html

(0)
Confluence Linux怎么安装?Confluence安装教程
上一篇 2026年7月12日 09:06
分布式数据库有哪些分类?分布式数据库分类及特点
下一篇 2026年7月12日 09:07

相关推荐

  • 新浪开发者认证怎么申请,申请流程及费用是多少

    成功接入新浪开放平台生态的核心在于完成标准化的开发者身份验证与应用授权流程,这不仅是获取接口调用权限的必经之路,更是保障数据交互安全与系统稳定性的基石, 通过严格的资质审核与密钥管理,开发者能够合法合规地利用微博社交关系链、SAE云资源等核心能力,从而构建高可用性的互联网应用,以下将从注册准备、应用创建、技术对……

    2026年2月23日
    14900
  • ASP.NET入门步骤?怎么写ASP.NET代码基础教程

    ASP.NET 核心开发指南ASP.NET 是微软推出的开源 Web 应用框架,用于构建企业级动态网站、API 及云服务,其核心能力包括 MVC 架构、Razor 页面、跨平台部署和高性能处理,开发环境搭建工具安装下载 Visual Studio 2022(社区版免费)工作负载勾选:ASP.NET 和 Web……

    2026年2月12日
    10400
  • DigiRDP荷兰美国服务器租用,DigiRDP服务器租用价格

    DigiRDP荷兰与美国节点在2026年主要用于跨境业务的高可用架构部署,荷兰节点凭借超低延迟连接欧洲市场且合规性严格,美国节点则依托硅谷生态覆盖全球流量,二者并非简单替代关系,而是根据业务辐射区域进行的互补性组合选择,DigiRDP架构核心优势与2026年市场定位在2026年的跨境数字化浪潮中,DigiRDP……

    2026年5月16日
    5400
  • 初中学生如何开展深度学习?初中学生深度学习的具体方法

    关于初中学生深度学习在探讨“初中学生深度学习”这一教育命题时,我们往往容易陷入一个误区:将“深度学习”简单等同于高强度的刷题或超前的知识灌输,从认知心理学和教育技术学的角度来看,深度学习(Deep Learning)指的是一种基于理解的学习,它要求学习者能够批判性地学习新思想和事实,并将它们融入原有的认知结构中……

    2026年5月31日
    5700
  • TNAHosting芝加哥VPS真的便宜吗?美国VPS推荐

    TNAHosting美国芝加哥VPS以$15/年的极致性价比、KVM架构及1Gbps高速端口,成为预算有限但追求稳定性的个人开发者与小型企业的首选方案,在云计算市场日益内卷的当下,寻找一款既便宜又稳定的VPS并非易事,许多用户被高昂的月付价格劝退,或者因廉价VPS的稳定性差而频繁迁移,TNAHosting推出的……

    2026年6月26日
    1900
  • 服务器ecs简单的使用,ecs服务器怎么使用教程

    ECS云服务器的核心价值在于将复杂的物理硬件运维转化为简单的云端操作,用户只需专注于业务部署即可快速构建稳定的计算环境,其使用流程本质上遵循“选购-配置-部署-运维”的闭环逻辑,掌握这一逻辑,便能高效驾驭云端资源, 精准选型与实例创建:构建业务的基石选型是成本与性能平衡的第一步, 许多新手在服务器ecs简单的使……

    2026年4月10日
    7200
  • Keil开发arm教程,Keil怎么开发arm程序?

    Keil开发ARM的核心在于构建一个从工程建立、代码编译到硬件调试的完整闭环,其本质是利用MDK-ARM(Microcontroller Development Kit)这一集成开发环境,将底层硬件抽象层(HAL)与高效编译器完美结合,实现嵌入式系统的高效开发,掌握工程配置、外设驱动编写以及调试器的深度使用,是……

    2026年3月17日
    11800
  • pacificrackVPS测评,美国8.8美元/年实测数据与性能表现,pacificrackVPS怎么样,pacificrackVPS测评

    Pacificrack VPS 在美国区域以 8.8 美元/年的极致性价比,成为 2026 年中小开发者与跨境业务部署的高频首选方案,其性能在低负载场景下表现稳定,但在高并发 I/O 密集型任务中需警惕共享资源争抢风险,核心性能实测:2026 年真实环境下的数据表现在 2026 年云计算基础设施全面向边缘计算与……

    2026年5月10日
    4800
  • Java连接RDS MySQL SSL验证失败怎么办,为什么?

    当RDS for MySQL启用SSL验证连接后,代码连接失败的根本原因在于客户端未正确配置SSL证书或连接参数,导致握手阶段被拒绝,解决方法是下载RDS的CA证书,并在Java/PHP/Python等语言的连接字符串中明确指定useSSL=true和信任证书路径,Java连接MySQL数据库代码:SSL验证失……

    2026年8月3日
    800
  • 1元体验高防CDN是真的吗,高防CDN哪家便宜

    云盒网络推出的1元高防CDN体验及物理机赠送活动,是应对当前DDoS攻击频发、企业降本增效需求的务实选择,尤其适合中小规模业务及初创团队进行低成本安全验证,在网络安全威胁日益复杂化的今天,单纯的价格战已不再是衡量服务价值的唯一标准,云盒网络此次推出的“1元体验高防CDN”与“300G高防超低价”策略,并非简单的……

    2026年6月29日
    1300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注