博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头
阅读量:5899 次
发布时间:2019-06-19

本文共 3554 字,大约阅读时间需要 11 分钟。

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    {        ///         /// 导出列表到excel文件        ///         /// 
/// 需要导出的列表数据 /// 需要自定义的字段和表头值 ///
public static MemoryStream ExportListToExcel
(List
data, Dictionary
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 = 0; i < worksheet.Dimension.End.Column; i++) { var name = worksheet.Cells[1, i + 1]?.Value?.ToString(); if (string.IsNullOrEmpty(name) == false && headers.ContainsKey(name)) { worksheet.Cells[1, i + 1].Value = headers[name]; } } } return new MemoryStream(package.GetAsByteArray()); } } }}

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

在api里的调用代码

///         /// 交易记录,导出        ///         /// 查询条件        /// 登录令牌        /// 
[HttpGet("export")] public IActionResult CrmTradeRecordListExport([FromQuery] CrmTradeRecordListReq req, [FromHeader] [Required] string token) { req.LoginUserInfo = _loginUser; req.PageIndex = "1"; req.PageSize = int.MaxValue.ToString(); var resp = _DoInvoke(req, _assetsService.CrmTradeRecordList); if (resp.Status == 1) { var data = new List
(); 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
{ { "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来告诉客户端文件的名字,方便客户端处理。

搞定

 

转载地址:http://zmhsx.baihongyu.com/

你可能感兴趣的文章
ASP.NET视频教程 手把手教你做企业论坛网站 视频教程
查看>>
[LeetCode] Meeting Rooms II
查看>>
从Swift学习iOS开发的路线指引
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
实验五
查看>>
3-继承
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
JSP----九大内置对象
查看>>
Java中HashMap详解
查看>>
delphi基本语法
查看>>
沙盒目录介绍
查看>>
260. Single Number III
查看>>
Hadoop生态圈-Kafka的完全分布式部署
查看>>
css的border的solid
查看>>
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
查看>>
jQuery自动完成点击html元素
查看>>
[算法]基于分区最近点算法的二维平面
查看>>