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/article/486074.html

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

相关推荐

  • 服务器cpu使用率多少为正常?服务器CPU占用率多少是合理的

    服务器CPU使用率在30%至70%之间通常被视为正常运行的健康区间,这一区间既保证了业务计算资源的充足供给,又预留了应对突发流量的安全冗余,是服务器性能调优与成本控制的平衡点,低于10%的长期低负载意味着资源浪费,而高于80%的持续高负载则预示着系统瓶颈或宕机风险,判断CPU使用率是否正常,不能仅看单一数值,需……

    2026年4月3日
    9100
  • 如何编写高效的aspx连接数据库代码?有哪些关键点需要注意?

    在ASP.NET应用程序中,连接数据库是核心功能之一,本文深入探讨ASP.NET连接SQL Server数据库的完整实现方案,涵盖基础连接、安全优化、异常处理和性能提升等关键环节,并提供可直接落地的代码示例,基础数据库连接实现使用SqlConnection类建立连接是ASP.NET操作SQL Server的标准……

    2026年2月5日
    12700
  • 青岛IDC合同里的隐性费用有哪些

    签订青岛IDC合同时,最容易被忽略的隐性费用集中在带宽超量、电力超额、IP地址占用、增值服务和解约违约金五个方面,这些费用叠加起来可能使总成本增加30%以上,很多企业首次选择青岛IDC机房时,只关注基础托管价格,对合同细节一知半解,下面我帮你把隐性费用的真实面目逐个拆开,让你签合同前心里有数,青岛IDC合同里的……

    2026年8月12日
    1000
  • 广州网站制作哪家好?广州做网站公司怎么选

    2026年广州网站制作的破局点在于:摒弃传统模板建站,转向以AI驱动、深度融合SEO底层逻辑与高转化率设计的定制化开发,方能在大模型搜索时代获取持续流量,2026广州网站制作行业底层逻辑重构搜索引擎算法迭代与流量分配机制根据【中国互联网协会】2026年Q1发布的《企业数字化营销洞察报告》,百度搜索结果页中AI摘……

    2026年4月28日
    5700
  • AkkoCloud加入移动CMIN2吗?500M带宽德国英国CN2 GIA VPS季付99元起

    AkkoCloud正式接入中国移动CMIN2网络,德国与英国节点提供500M带宽CN2 GIA线路,季付价格低至99元起,是追求低延迟与高稳定性的优质选择,在VPS(虚拟专用服务器)市场中,网络质量往往是决定用户体验的核心变量,对于需要访问国内资源的海外用户而言,普通国际线路的拥堵和高延迟是常态痛点,AkkoC……

    2026年7月4日
    13000
  • Excel控件该如何快速隐藏,Excel控件怎么显示和隐藏?

    Excel 隐藏控件全指南在 Excel 中,“控件”通常指代表单控件、ActiveX 控件、形状、图片或图表,根据您的需求(是想隐藏所有对象,还是只想隐藏某一个特定的按钮),可以采用以下不同的方法, 隐藏工作簿中的所有对象(最快的方法)如果您希望一次性隐藏当前工作簿中所有的图片、形状、按钮和图表,可以通过 E……

    2026年7月13日
    10000
  • 锋云ktv服务器数据播放异常咋回事,数据修复方法有哪些?

    锋云ktv服务器数据播放异常,多数情况下是硬盘坏道、缓存文件损坏、网络丢包或点歌系统并发过高导致的,按“软件-硬件-网络”顺序排查就能快速定位,为什么锋云ktv服务器会出现播放异常KTV点歌系统的数据链路并不复杂:服务器硬盘存储歌曲文件,网络交换机把它们送到包间机顶盒,机顶盒解码后输出到电视和音响,任何一个环节……

    2026年8月26日
    800
  • 我叫mt4不同服务器能一起玩吗,跨服怎么玩?

    不同服务器的玩家无法直接跨服组队,但通过官方转服功能或选择合区后的服务器,你能和好友在同一个世界并肩作战,转服:不同服务器玩家一起玩的核心途径官方转服是让角色从当前服务器迁移到另一个服务器的主要方式,通过转服,你和朋友可以进入同一个服务器,从此一起副本、一起公会战、一起野外PK,转服条件转服不是随时随地都能操作……

    2026年8月21日
    700
  • ASP如何获取下一条数据?高效数据库查询技巧

    在ASP中获取下一条数据主要通过对Recordset对象使用MoveNext方法实现,这是处理数据库查询结果集的基础操作,以下是详细的工作原理、最佳实践及解决方案:核心机制:Recordset与游标操作ASP通过ADO (ActiveX Data Objects)访问数据库,查询结果存储在Recordset对象……

    2026年2月7日
    13930
  • 广播式网络采用分组存储转发吗?分组存储转发与路由选择技术有何特点

    广播式网络的重要特点之一就是采用分组存储转发与路由选择技术,这一机制彻底打破了传统点对点直连的局限,赋予了网络动态寻址、弹性扩容与极高容错率的底层生命力,核心机制解构:为何分组与路由成为广播式网络的灵魂分组存储转发:数据传输的微粒化重构在广播式网络的演进历程中,将完整数据切分为独立分组是跃迁的关键,每个分组携带……

    2026年4月25日
    4900

发表回复

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