【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头
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导出功能 配置中文表头的更多相关文章
- 【netcore基础】.Net core自动作业之Hangfire
nuget搜索:Hangfire 安装即可,这里我选择的是 1.7.0-beta1 版本 我是用这个集成到了 mvc api里 这里需要在 Startup 文件里进行如下配置 在配置方法 Config ...
- 【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 ...
- 【.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 ...
- 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动
之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...
- 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.单继 ...
- .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2
上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...
- ASP.NET Core Razor页面 vs MVC
作为.NET Core 2.0发行版的一部分,还有一些ASP.NET的更新.其中之一是添加了一个新的Web框架来创建"页面",而不需要复杂的ASP.NET MVC.新的Razor页 ...
- ASP.NET Core中使用自定义MVC过滤器属性的依赖注入
除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的 ...
- ASP.NET Core使用EPPlus操作Excel
1.前言 本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用 2.使用 新建一个AS ...
随机推荐
- IAAS、SAAS 和 PAAS 的区别、理解
通俗的讲: 如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序.现在你追随潮流,采用流行的云计算,如果你采用IaaS服务,那么意味着你就 ...
- AngularJS中写一个包裹HTML元素的directive
有这样的一个场景,这里有一个表单: <form role="form"> ...</form> 我们希望在form的外层动态包裹上一层. 有可能是这样 ...
- 使用Python学习selenium测试工具-4:查找元素
转自:https://blog.csdn.net/wd168/article/details/51819930 web通常包含了Hyper Text Markup Language (HTML).Ca ...
- 《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv
矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...
- Spark:实现行转列
示例JAVA代码: import static org.apache.spark.sql.functions.col; import static org.apache.spark.sql.funct ...
- Vim命令相关
在shell中,记住一些常用的vim命令,会在操作时候事半功倍. 光标移动 h,j,k,l,h #表示往左,j表示往下,k表示往右,l表示往上 Ctrl f #上一页 Ctrl b #下一页 w, e ...
- Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)
简介 这个项目是很久之前的事情了,当时一个朋友正在研究一个国外的软件(wall paper engine ),可以在桌面壁纸层播放视频,也就差不多是动态壁纸的意思. 后来我也动手来实现这个功能,因为手 ...
- Eclipse环境安装Python插件PyDev
转载自:http://blog.csdn.net/typa01_kk/article/details/49251247 clipse环境安装Python插件PyDev 软件准备,下载地址,先看安装,再 ...
- SNF快速开发平台3.0之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者
广播信息,即速度快捷.迅速及时.简明扼要的把信息发送给接收者. 当然在SNF快速开发平台上你也可以作为公告使用.不管当做什么使用要满足以下需求: 简单操作:页面操作简单 只需要输入内容就可以发送. 灵 ...
- malloc()參数为0的情况
以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a v ...