EPPlus 用来操作excel非常方便,不用依赖微软的office包,所以推荐使用。

下面是具体步骤和代码

首先用nuget安装 EPPlus.Core 我装的版本是 1.5.4

然后就可以用 ExcelPackage 操作一个sheet了

这里我们直接返回给前端的是一个文件流,所以生成的是 MemoryStream

通用类代码

using OfficeOpenXml;
using System.Collections.Generic;
using System.IO; namespace Common
{
public class ExcelHelper
{
/// <summary>
/// 导出列表到excel文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data">需要导出的列表数据</param>
/// <param name="headers">需要自定义的字段和表头值</param>
/// <returns></returns>
public static MemoryStream ExportListToExcel<T>(List<T> data, Dictionary<string, string> headers = null)
{
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("sheet1");
worksheet.Cells.LoadFromCollection(data, true); if (headers != null)
{
for (int i = ; i < worksheet.Dimension.End.Column; i++)
{
var name = worksheet.Cells[, i + ]?.Value?.ToString();
if (string.IsNullOrEmpty(name) == false && headers.ContainsKey(name))
{
worksheet.Cells[, i + ].Value = headers[name];
}
}
} return new MemoryStream(package.GetAsByteArray());
}
}
}
}

因为自定义对象data里的字段都是英文的,生成的表头也是英文,所以这里我是传了一个自定义的 header 字典,来配置表头中英文的对应关系。

在api里的调用代码

        /// <summary>
/// 交易记录,导出
/// </summary>
/// <param name="req">查询条件</param>
/// <param name="token">登录令牌</param>
/// <returns></returns>
[HttpGet("export")]
public IActionResult CrmTradeRecordListExport([FromQuery] CrmTradeRecordListReq req, [FromHeader] [Required] string token)
{
req.LoginUserInfo = _loginUser;
req.PageIndex = "";
req.PageSize = int.MaxValue.ToString(); var resp = _DoInvoke(req, _assetsService.CrmTradeRecordList);
if (resp.Status == )
{
var data = new List<CrmTradeRecordExportData>(); foreach (var item in resp.Data.List)
{
data.Add(new CrmTradeRecordExportData
{
TradeTime = item.TradeTime,
MerchName = item.MerchName,
MerchTypeName = item.MerchTypeName,
TradeAccount = item.TradeAccount,
Price = item.Price,
TradeTypeName = item.TradeTypeName,
StatusName = item.StatusName,
});
} var headers = new Dictionary<string, string>
{
{ "TradeTime", "交易时间" }
,{ "MerchName", "商品名称" }
,{ "MerchTypeName", "商品类型"}
,{ "TradeAccount","交易账户"}
,{"Price","金额(元)" }
,{"TradeTypeName","" }
,{"StatusName","状态"}
}; var filename = $@"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx";
var stream = ExcelHelper.ExportListToExcel(data, headers); Response.Headers[HeaderNames.ContentDisposition] = new ContentDispositionHeaderValue("attachment") { FileName = filename }.ToString();
return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
} throw new GeduException(resp.Message, code: resp.Code);
}

重点代码黄色标注,其他的都是我自己的业务逻辑,可以不用参考。

注意返回的时候可以加一个header来告诉客户端文件的名字,方便客户端处理。

搞定

【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头的更多相关文章

  1. 【netcore基础】.Net core自动作业之Hangfire

    nuget搜索:Hangfire 安装即可,这里我选择的是 1.7.0-beta1 版本 我是用这个集成到了 mvc api里 这里需要在 Startup 文件里进行如下配置 在配置方法 Config ...

  2. 【netcore基础】ubuntu 16.04 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    今天来整理下 netcore 在 linux(ubuntu) 上的运行环境搭建 对应版本 ubuntu 16.04 .net core 2.1 nginx version: nginx/1.10.3 ...

  3. 【.NetCore学习】ubuntu16.04 搭建.net core mvc api 运行环境

    查看linux内核版本 uname -a 打印结果 python@ubuntu:~$ uname -a Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed ...

  4. 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...

  5. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  6. .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2

    上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...

  7. ASP.NET Core Razor页面 vs MVC

    作为.NET Core 2.0发行版的一部分,还有一些ASP.NET的更新.其中之一是添加了一个新的Web框架来创建"页面",而不需要复杂的ASP.NET MVC.新的Razor页 ...

  8. ASP.NET Core中使用自定义MVC过滤器属性的依赖注入

    除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的 ...

  9. ASP.NET Core使用EPPlus操作Excel

    1.前言 本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用 2.使用 新建一个AS ...

随机推荐

  1. Java全栈程序员之04:Ubuntu下安装MySQL、注册服务及Navcat

    在安装MySQL之前,我们先来介绍一下Ubuntu下软件的安装方式.首先回顾下,我们安装JDK,使用的是后缀名为tar.gz的安装包.安装idea,使用的是tar.gz:那有没有别的安装方式呢? 1. ...

  2. Java断言绝对不是鸡肋

    在防御式编程中经常会用断言(Assertion)对参数和环境做出判断,避免程序因不当的输入或错误的环境而产生逻辑异常,断言在很多语言中都存在,C.C++.Python 都有不同的断言表示形式.在Jav ...

  3. 原创:vsphere概念深入系列四:Nic Teaming若干问题

    参考文档:http://www.hyper-v.nu/archives/marcve/2013/01/lbfo-hyper-v-switch-qos-and-actual-performance-pa ...

  4. ng-repeat不添加容器标签

    如UL中的循环, 我们不期望添加额外的div之类的容器标签, 使用ng-repeat-start和ng-repeat-end可以实现 <li class="item item-icon ...

  5. 使用Ubuntu

    一.ubuntu把文件夹名称改为中文 vim ~/.config/user-dirs.dirs 修改文件内容为: XDG_DESKTOP_DIR="$HOME/Desktop" X ...

  6. jQuery Address全站 AJAX 完整案例详解

    本文详细介绍如何利用 jQuery 框架以及 jQuery Address 插件实现最基本的全站 AJAX 动态加载页面内容的功能的方法. 案例目标 以常见基本结构的网站为案例,实现全站链接 AJAX ...

  7. Hive SQL grouping sets 用法

    概述 GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时.天.月的UV数. ...

  8. zabbix server is not running,the information dispalyed may not be current

    查看zabbix服务器和客户端的端口及进程都是正常启动,打印的日志也没什么异常,但是就是在主页提示zabbix server is not running 不防尝试改一下zabbix_server的配 ...

  9. 物联网架构成长之路(10)-Nginx负载均衡

    0. 前言 关于Nginx负载均衡的简单配置,我以前博客配置过基于HTTP的负载均衡.这次的负载均衡有点不一样,就是基于TCP的负载均衡.基于HTTP负载均衡是默认的Nginx版本支持的,配置也很简单 ...

  10. Socket网络编程--小小网盘程序(5)

    各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中的文件列表,还有删除用户在服务器中的文件,最后的可以共享文件给好友. 列出用户在服务器中的文件 ...