【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 ...
随机推荐
- grep/pgrep/egrep/fgrep
Differences between grep, pgrep, egrep, and fgrep (Linux): grep grep is an acronym that stands for & ...
- 手机 https 抓包---Charles篇
原文出处: Lu尼玛的想疗院 作为一名现代前端,除了要掌握html,css,js 以及一系列乱七八糟框架之外,还得懂得如何抓包改包.当然,常规的网站或者自主开发的我们往往使用 chrome或者 fir ...
- c++设计一个无法被继承的类
要求是该类不能被继承,但是能够像正常的类一样使用.那么一下方法就不符合题目要求: 1.构造函数和析构函数设置为private.这样就不能定义一个类的实例 2.类似于singleton模式那样,定义一个 ...
- 微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法
开篇介绍 在 SSIS 中并没有直接提供从数据源到 XML 的转换输出,Destination 的输出对象有 Excel File, Flat File, Database 等,但是并没有直接提供 X ...
- ORA-16447 Redo apply was not active at the target standby database
Cause ALTER SYSTEM FLUSH REDO TO STANDBY failed because redo apply is not active at the target datab ...
- 视觉SLAM中的数学基础 第三篇 李群与李代数
视觉SLAM中的数学基础 第三篇 李群与李代数 前言 在SLAM中,除了表达3D旋转与位移之外,我们还要对它们进行估计,因为SLAM整个过程就是在不断地估计机器人的位姿与地图.为了做这件事,需要对变换 ...
- 抓取epsg.io的内容
简述 epsg.io是一个查询EPSG坐标系相关信息的好网站,内容很全.有各种格式的定义可以直接下载,也有坐标系的范围名称等相关信息,所以想抓取这些信息下来,方便对接各个系统. epsg.io本身是开 ...
- 内核编译之vmlinuz vmlinux system.map initrd
一.vmlinuz vmlinuz是可引导的.压缩的内核.“vm”代表“Virtual Memory”.Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制.Linux能够使用 ...
- Java 8系列之Stream的基本语法详解
本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...
- PEM文件
原文链接: http://blog.sina.com.cn/s/blog_489f88710100a59w.html OpenSSL 使用 PEM 文件格式存储证书和密钥.PEM 实质上是 Base6 ...