/// <summary>
/// 下载订单
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[Route("export")]
[JdyAuthorize(Roles = "ordermanager")]
[HttpGet]
public IActionResult DownloadOrders([FromQuery]OrderSearchModel model)
{
//var currentUseId = User.FindFirst("sub").Value;
var currentUseId = "test"; var rootPath = _hostingEnvironment.ContentRootPath + "/orderExcels/";
if (System.IO.Directory.Exists(rootPath) == false)
System.IO.Directory.CreateDirectory(rootPath); var newFile = rootPath + "/orderExcels" + currentUseId + ".xls";
if (System.IO.File.Exists(newFile))
{
System.IO.File.Delete(newFile);
} var result = _orderReadService.GetOrderListAsync(
0, 1000, model.OrderNo,
model.OrderStatus, model.CustomerManagerId, model.StartTime,
model.EndTime, model.ProductId, model.ProductVariantId,
model.OrderClaimedStatus, model.TradeType, model.ChannelId, string.Empty).Result; if (result.Items.Count() == 0)
return BadRequest(); using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
{ IWorkbook workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet("orders"); var header = sheet.CreateRow(0);
header.CreateCell(0).SetCellValue("交易时间");
header.CreateCell(1).SetCellValue("产品");
header.CreateCell(2).SetCellValue("类型");
header.CreateCell(3).SetCellValue("公司");
header.CreateCell(4).SetCellValue("订单号");
header.CreateCell(5).SetCellValue("渠道");
header.CreateCell(6).SetCellValue("来源");
header.CreateCell(7).SetCellValue("客户经理");
header.CreateCell(8).SetCellValue("状态");
header.CreateCell(9).SetCellValue("支付方式");
header.CreateCell(10).SetCellValue("应付");
header.CreateCell(11).SetCellValue("实付"); var rowIndex = 1;
foreach (var item in result.Items)
{
var datarow = sheet.CreateRow(rowIndex); datarow.CreateCell(0).SetCellValue(item.OrderCreateTime.ToString("yyyy-MM-dd HH:mm:ss"));
datarow.CreateCell(1).SetCellValue(item.ProductVariantName);
datarow.CreateCell(2).SetCellValue(item.TradeType.GetEnumDescribe());
datarow.CreateCell(3).SetCellValue(item.CustomerName);
datarow.CreateCell(4).SetCellValue(item.OrderNo); datarow.CreateCell(5).SetCellValue(item.ChannelName);
datarow.CreateCell(6).SetCellValue("阿里云");
datarow.CreateCell(7).SetCellValue(item.CustomerManager);
datarow.CreateCell(8).SetCellValue(item.OrderStatus.GetEnumDescribe());
datarow.CreateCell(9).SetCellValue("其他"); datarow.CreateCell(10).SetCellValue(item.ChannelPaymentOrderTotal.ToString("#0.00"));
datarow.CreateCell(11).SetCellValue(item.ChannelActualOrderTotal.ToString("#0.00")); rowIndex++;
} workbook.Write(fs);
} var memory = new MemoryStream();
using (var stream = new FileStream(newFile, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0; return File(memory, "application/vnd.ms-excel", "order.xlsx");
}

用到了 dotnetcore.NPOI (from nuget).

参考了

http://www.emanuelebartolesi.com/asp-net-core-webapi-download-upload-files/

以及一些补充

csv的导出 https://stackoverflow.com/questions/47423563/how-can-i-return-a-csv-file-in-asp-net-core-2

前后端分离,导出数据为文件或下载文件,前端如何处理后端返回的数据

asp.net core webapi 生成导出excel的更多相关文章

  1. 第二十节:Asp.Net Core WebApi生成在线文档

    一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...

  2. Asp.net core WebApi 使用Swagger生成帮助页

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...

  3. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  4. ASP.NET Core WebApi使用Swagger生成api

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  5. ASP.NET Core WebApi使用Swagger生成api说明文档

    1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...

  6. Asp.net core WebApi 使用Swagger生成帮助页实例

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...

  7. asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

    1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...

  8. 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...

  9. ASP.NET Core WebApi使用Swagger生成API说明文档【xml注释版】

    ⒈新建ASP.NET Core WebAPi项目 ⒉添加 NuGet 包 Install-Package Swashbuckle.AspNetCore ⒊Startup中配置 using System ...

随机推荐

  1. easyui时的时间格式yyyy-MM-dd与yyyy-MM-ddd HH:mm:ss

    easyui日期的转换,日期汉化导入:<script type="text/javascript" src="../easyui/locale/easyui-lan ...

  2. app -webkit-box-orient: vertical 打包后不显示

    先说明问题是什么: -webkit-box-orient: vertical 这个属性在本地运行调试是存在的,但是打包后这个属性消失了: 解决办法: 1.将-webkit-box-orient: ve ...

  3. 大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)

    大众点评selfxss结合两个csrf变废为宝 漏洞不值钱,但还是蛮好玩的 漏洞信息 类型:存储型xss 场景:收藏商户后,去已收藏的商户列表可以给指定商户添加tag(与下文html标签区别) 漏洞限 ...

  4. 转 SaaS应用十大关键NFR - 第1部分

    非功能需求(SaaS的NFR)是跨越应用功能的跨越所有模块和功能的要求.这些要求深入到应用程序的架构,这是他们得到解决的地方.因此,在SaaS架构阶段之前了解这些NFR对于特定应用程序很重要,因此应用 ...

  5. Linux启动流程和脚本服务-6

    授课笔记:----------------------------------- linux系统启动流程:一.初始化阶段:1.grub引导界面2.识别硬件3.初始化驱动 二.加载/etc/rc.d/r ...

  6. Git的分支管理

    0.引言 本文参考最后的几篇文章,将git的分支管理整理如下.学习git的分支管理将可以版本进行灵活有效的控制. 1.如何建立与合并分支 1.1分支的新建与合并指令 新建分支 newBranch,并进 ...

  7. Ftp主动模式和被动模式以及java连接ftp模式设置

    Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...

  8. ASP.NET Core 微服务初探[2]:熔断降级之Polly

    当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...

  9. Java面试题精选,大型网站系统架构你不得不懂的10个问题

    作者:JavaGuide(公众号) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解大型网站系统技术架构朋友 ...

  10. 每天学点SpringCloud(六):Hystrix使用

    Hystrix是一个实现断路器模式的库.什么是断路器模式呢?就像我们家庭中的电闸一样,如果有那一处出现意外,那么电闸就会立刻跳闸来防止因为这一处意外而引起更大的事故,直到我们确认处理完那一处意外后才可 ...