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. delphi中接口的委托和聚合

    Delphi的TRegistry注册表类 方法详解 Delphi的接口编程入门 delphi中接口的委托和聚合 2009-09-27 10:44:44|  分类: 默认分类 |  标签: |举报 |字 ...

  2. unity 打包编译记录

    1.放到Plugins目录下的贴图不会打包进去 2.放到Plugins目录下的dll会自动打包,代码也会打包 3.放在Resources目录下的资源会自动打包 4.放在StreamingAssets目 ...

  3. dwz Esc关闭dialog 窗口

    document.onkeydown = function(e){ // alert(1) var keycode = ""; if(navigator.appName == &q ...

  4. caffe中的fine-tuning

    caffe finetune两种修改网络结构prototxt方法 第一种方法:将原来的prototxt中所有的fc8改为fc8-re.(若希望修改层的学习速度比其他层更快一点,可以将lr_mult改为 ...

  5. MySQL垂直拆分和水平拆分的优缺点和共同点总结

    数据的拆分(Sharding)根据其拆分分规则的类型,可以分为两种拆分模式.一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)拆分:另外一种则是 ...

  6. Google Maps瓦片(tile)地图文件下载(1-11层级)

    整理硬盘时,发现一份去年下载的谷歌地图瓦片文件,整理并分享给大家. 地图来源:Google Maps(应该是国内谷歌地图) 采集时间:2017年6月 采集范围:0-6层级世界范围:7-11层级中国范围 ...

  7. Python:提取网页中的电子邮箱

    import requests, re #regex = r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"#这个正则表达式过滤 ...

  8. 下载fiddler证书并设置信任

    一.苹果手机 待整理 二.android手机 待整理

  9. 转 qInstallMsgHandler实现日志输出

    #include <QtDebug> #include <QFile> #include <QTextStream> #define _TIME_ qPrintab ...

  10. 分库分表利器——sharding-sphere

    背景 得不到的东西让你彻夜难眠,没有尝试过的技术让我跃跃欲试. 本着杀鸡焉用牛刀的准则,我们倡导够用就行,不跟风,不盲从. 所以,结果就是我们一直没有真正使用分库分表.曾经好几次,感觉没有分库分表(起 ...