怎么做电商网站推广,哈尔滨品牌建站软件,马蜂窝旅游网站怎么做,wordpress 悬浮按钮前言总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel#xff0c;出于从框架的体验和易用性的角度#xff0c;Magicodes.IE决定对Excel的导出进行独立封装#xff0c;以便于大家更易于使用#xff0c;开箱即用。注意#xff1a;Magicodes.IE是从框架的易用性… 前言总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel出于从框架的体验和易用性的角度Magicodes.IE决定对Excel的导出进行独立封装以便于大家更易于使用开箱即用。注意Magicodes.IE是从框架的易用性和体验的角度对Excel导出进行了封装但是希望大家先理解原理后再使用。1.安装包Install-Package Magicodes.IE.Excel.AspNetCore2.引用命名空间using Magicodes.ExporterAndImporter.Excel.AspNetCore;3.直接使用XlsxFileResult参考Demo如下所示 [ApiController][Route(api/[controller])]public class XlsxFileResultTests : ControllerBase{/// summary/// 使用Byte数组导出Excel文件/// /summary/// returns/returns[HttpGet(ByBytes)]public async TaskActionResult ByBytes(){//随机生成100条数据var list GenFu.GenFu.ListOfExportTestDataWithAttrs(100);var exporter new ExcelExporter();var bytes await exporter.ExportAsByteArrayExportTestDataWithAttrs(list);//使用XlsxFileResult进行导出return new XlsxFileResult(bytes: bytes);}/// summary/// 使用流导出Excel文件/// /summary/// returns/returns[HttpGet(ByStream)]public async TaskActionResult ByStream(){//随机生成100条数据var list GenFu.GenFu.ListOfExportTestDataWithAttrs(100);var exporter new ExcelExporter();var result await exporter.ExportAsByteArrayExportTestDataWithAttrs(list);var fs new MemoryStream(result);return new XlsxFileResult(stream: fs, fileDownloadName: 下载文件);}/// summary/// 使用泛型集合导出Excel文件/// /summary/// returns/returns[HttpGet(ByList)]public async TaskActionResult ByList(){var list GenFu.GenFu.ListOfExportTestDataWithAttrs(100);return new XlsxFileResultExportTestDataWithAttrs(data: list);}}如上所示引用 Magicodes.IE.Excel.AspNetCore之后导出就会变得如此简单。值得注意的是使用XlsxFileResult需引用包Magicodes.IE.Excel.AspNetCoreXlsxFileResult继承自ActionResult目前支持字节数组、流和泛型集合为参数的Excel文件下载支持传递下载文件名参数名fileDownloadName如不传则自动生成唯一的文件名核心实现在Magicodes.IE.Excel.AspNetCore中我们添加了自定义的ActionResult——XlsxFileResult核心参考代码如下所示 /// summary/// Excel文件ActionResult/// /summary/// typeparam nameT/typeparampublic class XlsxFileResultT : XlsxFileResultBase where T : class, new(){/// summary////// /summary/// param namedata/param/// param namefileDownloadName/parampublic XlsxFileResult(ICollectionT data, string fileDownloadName null){FileDownloadName fileDownloadName;Data data;}public string FileDownloadName { get; }public ICollectionT Data { get; }public async override Task ExecuteResultAsync(ActionContext context){var exporter new ExcelExporter();var bytes await exporter.ExportAsByteArray(Data);var fs new MemoryStream(bytes);await DownloadExcelFileAsync(context, fs, FileDownloadName);}}/// summary////// /summarypublic class XlsxFileResult : XlsxFileResultBase{/// summary////// /summary/// param namestream/param/// param namefileDownloadName/parampublic XlsxFileResult(Stream stream, string fileDownloadName null){Stream stream;FileDownloadName fileDownloadName;}/// summary////// /summary/// param namebytes/param/// param namefileDownloadName/parampublic XlsxFileResult(byte[] bytes, string fileDownloadName null){Stream new MemoryStream(bytes);FileDownloadName fileDownloadName;}public Stream Stream { get; protected set; }public string FileDownloadName { get; protected set; }public async override Task ExecuteResultAsync(ActionContext context){await DownloadExcelFileAsync(context, Stream, FileDownloadName);}}/// summary/// 基类/// /summarypublic class XlsxFileResultBase : ActionResult{/// summary/// 下载Excel文件/// /summary/// param namecontext/param/// param namestream/param/// param namedownloadFileName/param/// returns/returnsprotected virtual async Task DownloadExcelFileAsync(ActionContext context,Stream stream,string downloadFileName){var response context.HttpContext.Response;response.ContentType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;if (downloadFileName null){downloadFileName Guid.NewGuid().ToString(N) .xlsx;}if (string.IsNullOrEmpty(Path.GetExtension(downloadFileName))){downloadFileName .xlsx;}context.HttpContext.Response.Headers.Add(Content-Disposition, new[] {attachment; filename HttpUtility.UrlEncode(downloadFileName)});await stream.CopyToAsync(context.HttpContext.Response.Body);}}欢迎大家多多PR并且前来解锁更多玩法。最后教程已上传Github有兴趣有精力的朋友可以帮忙PR一下单元测试由于精力有限先手测了可参考ASP.NET Core 中的测试控制器逻辑 | Microsoft Docs写个功能几分钟到十几分钟码个文档要半天就此结束。Magicodes.IE导入导出通用库支持Dto导入导出、模板导出、花式导出以及动态导出支持Excel、Csv、Word、Pdf和Html。Githubhttps://github.com/dotnetcore/Magicodes.IE码云手动同步不维护https://gitee.com/magicodes/Magicodes.IE相关库会一直更新在功能体验上有可能会和本文教程有细微的出入请以相关具体代码、版本日志、单元测试示例为准。