asp.net core webapi 生成导出excel
/// <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
本人在长沙, 有工作可以加我QQ4658276