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://idctop.com/mvc%e6%80%8e%e4%b9%88%e4%b8%8b%e8%bd%bdexcel%e6%96%87%e4%bb%b6%ef%bc%9fasp-net-mvc%e5%af%bc%e5%87%baexcel%e4%b9%b1%e7%a0%81/

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

相关推荐

  • 香港物理机站群服务器怎么选?香港CN2物理机加配不加价

    百纵科技全新上线的香港物理机、站群服务器及CN2物理机,以“加配不加价”的极致性价比,为跨境业务提供低延迟、高稳定的底层算力支持,是2026年出海布局的首选方案,在数字化浪潮席卷全球的今天,网络基础设施的质量直接决定了业务的上限,对于从事跨境电商、游戏出海、金融交易或内容分发的企业而言,香港因其独特的地理位置和……

    2026年6月27日
    1610
  • 怎么看服务器cpu和内存使用情况,Linux查询命令有哪些?

    判断服务器CPU和内存使用情况,最直接的方法是登录服务器执行系统自带命令或查看管理面板,其中Linux用top命令、Windows用任务管理器是最通用的入门操作,很多朋友第一次接触服务器,听到“CPU满了”“内存不够”就头疼,其实这件事没想象中复杂,服务器不像手机,它没有好看的图形界面给你划拉,大多数时候你面对……

    2026年8月27日
    800
  • php在服务器上运行找不到怎么回事,是什么原因导致的?

    Nginx或Apache没有把PHP文件交给PHP解释器处理,这是九成以上“PHP上传服务器后找不到文件”问题的根源,并非你的PHP代码写错了,而是Web服务器根本不认识这个文件,压根没执行它,php文件上传服务器后打不开404是什么原因很多朋友在本地用集成环境(比如phpstudy、XAMPP)调试代码一切正……

    2026年10月6日
    100
  • 安卓开发网易IM服务器怎么使用?,网易IM接入常见问题

    安卓开发接入网易IM服务,本质就是通过官方SDK调用云信服务器的REST API,实现消息收发、用户管理和会话同步,核心操作流程只有五步:创建应用、集成SDK、初始化登录、调用收发接口、监听回调,先搞清“网易IM服务器”在安卓开发里到底指什么很多新手容易把“服务器”想成自己得搭一台Linux机器,其实网易云信……

    程序编程 2026年10月22日
    100
  • Win7自带远程桌面怎么连接服务器,连接不上怎么办?

    用win7自带的远程桌面连接服务器,核心就一句话:先在目标电脑上开启“允许远程桌面连接”,再通过“mstsc”输入对方IP和账号密码就能连上,整个过程不需要装任何第三方软件,但前提是网络通、账号有权限、防火墙放行3389端口,要想把这件事彻底搞明白,咱们得分步骤来,这篇文章会把从开启服务器端的远程桌面功能,到客……

    2026年9月22日
    100
  • 构建智慧物流系统有什么意义?智慧物流系统建设方案

    构建智慧物流系统的核心意义在于通过数字化与自动化技术,实现供应链全链路的实时可视、智能决策与成本极致优化,从而在激烈的市场竞争中确立效率与体验的双重优势,物流行业早已告别了单纯依靠人力堆砌的粗放时代,面对消费者日益增长的“次日达”甚至“小时达”需求,以及企业对于降本增效的极致追求,传统物流模式显得捉襟见肘,智慧……

    2026年5月26日
    5100
  • 斗罗大陆h5怎么进旧服务器

    斗罗大陆h5进旧服务器的核心方法就一句话:在登录选区界面点击“服务器列表”,通过右上角搜索框输入旧区名称或编号,或直接下拉列表查找带有“合服”标识的老区入口即可进入,很多玩家回归后发现找不到自己当年的老区,其实不是区服被删了,而是入口被折叠进了合服分组里,下面我把几种进旧服的路径、注意事项和合服规则一次讲清楚……

    程序编程 2026年8月28日
    2100
  • 广州系统硬盘数据恢复多少钱一次?广州硬盘恢复数据大概需要多少钱

    2026年广州系统硬盘数据恢复的常规价格在300元至2000元之间,具体费用取决于硬盘故障类型、存储介质及数据抢救难度,逻辑层故障恢复成本较低,物理层损坏则需开盘处理,价格显著上升,广州系统硬盘数据恢复价格拆解与故障图谱逻辑层故障:系统崩溃与误删当硬盘出现系统无法引导、误格式化、中勒索病毒等情况,但磁盘物理介质……

    2026年4月28日
    5000
  • TCP服务器如何连接多个客户端,怎样实现多客户端并发连接?

    TCP服务器与多个客户端建立连接的核心不是给每个客户端开一个监听端口,而是用一个监听套接字接收握手,再通过accept为每个客户端生成独立连接套接字;并发能力取决于accept之后用多进程、多线程、IO多路复用还是异步模型处理这些连接,TCP服务器怎么与多个客户端建立连接:从三次握手到accept队列TCP服务……

    2026年10月4日
    100
  • 搬瓦工香港CN2 GIA VPS补货了吗?香港VPS三网直连哪家强

    搬瓦工香港CN2 GIA VPS近期已恢复补货,三网直连且带宽高达1Gbps,月付低至$83.90,是目前国内用户访问海外服务器延迟最低、稳定性最高的选择之一,搬瓦工香港CN2 GIA线路深度解析对于许多需要连接海外网络的用户来说,线路质量直接决定了使用体验,搬瓦工(BandwagonHost)作为老牌服务商……

    程序编程 2026年7月5日
    4400

发表回复

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