tnblog
首页
视频
资源
登录

abp中文件下载,将内存数据导出到Excel并下载

4450人阅读 2022/4/11 15:39 总访问:1595892 评论:0 收藏:0 手机
分类: ABP

1.数据导出为Excel的Stream

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using Abp.Collections.Extensions;
  5. using OfficeOpenXml;
  6. using System.Web;
  7. using Abp.Web.Models;
  8. namespace Common.Exporting
  9. {
  10.     public static class ExcelExporter<T>
  11.     {
  12.         /// <summary>
  13.         /// 导出Excel文件
  14.         /// </summary>
  15.         /// <returns></returns>
  16.         public static AjaxResponse GetFileResponse(string fileName, string sheetName, IList<T> dtoList, string[] header, Func<T, object>[] propertySelectors)
  17.         {
  18.             AjaxResponse res = new AjaxResponse();
  19.             try
  20.             {
  21.                 byte[] data = ExportExcelStream(sheetName, dtoList,header, propertySelectors);
  22.                 var Response = HttpContext.Current.Response;
  23.                 Response.ContentType = "applicationnd.ms - excel";
  24.                 Response.AddHeader("Content-Disposition"string.Format("attachment;filename={0}", fileName));
  25.                 Response.Clear();
  26.                 Response.BinaryWrite(data);
  27.                 Response.End();
  28.                 res.Success = true;
  29.             }
  30.             catch (Exception ex)
  31.             {
  32.                 res.Success = false;
  33.                 res.Error = new ErrorInfo();
  34.                 res.Error.Code = 500;
  35.                 res.Error.Message = "导出数据错误";
  36.                 res.Error.Details = ex.ToString();
  37.             }
  38.             return res;
  39.         }
  40.         public static byte[] ExportExcelStream(string sheetName, IList<T> dtoList, string[] header, Func<T, object>[] propertySelectors)
  41.         {
  42.             return CreateExcelStream(
  43.                     excelPackage =>
  44.                     {
  45.                         var sheet = excelPackage.Workbook.Worksheets.Add(sheetName);
  46.                         sheet.OutLineApplyStyle = true;
  47.                         AddHeader(sheet, header);
  48.                         AddObjects(sheet, 2, dtoList, propertySelectors);
  49.                         for (var i = 1; i <= header.Length; i++)
  50.                         {
  51.                             sheet.Column(i).AutoFit();
  52.                         }
  53.                     });
  54.         }
  55.         public static byte[] CreateExcelStream(Action<ExcelPackage> creator)
  56.         {
  57.             using (var excelPackage = new ExcelPackage())
  58.             {
  59.                 creator(excelPackage);
  60.                 MemoryStream ms = new MemoryStream();
  61.                 excelPackage.SaveAs(ms);
  62.                 return ms.GetBuffer();
  63.             }
  64.         }
  65.         public static void AddHeader(ExcelWorksheet sheet, params string[] headerTexts)
  66.         {
  67.             if (headerTexts.IsNullOrEmpty())
  68.             {
  69.                 return;
  70.             }
  71.             for (var i = 0; i < headerTexts.Length; i++)
  72.             {
  73.                 AddHeader(sheet, i + 1, headerTexts[i]);
  74.             }
  75.         }
  76.         public static void AddHeader(ExcelWorksheet sheet, int columnIndex, string headerText)
  77.         {
  78.             sheet.Cells[1, columnIndex].Value = headerText;
  79.             sheet.Cells[1, columnIndex].Style.Font.Bold = true;
  80.         }
  81.         public static void AddObjects<T>(ExcelWorksheet sheet, int startRowIndex, IList<T> items, params Func<T, object>[] propertySelectors)
  82.         {
  83.             if (items.IsNullOrEmpty() || propertySelectors.IsNullOrEmpty())
  84.             {
  85.                 return;
  86.             }
  87.             for (var i = 0; i < items.Count; i++)
  88.             {
  89.                 for (var j = 0; j < propertySelectors.Length; j++)
  90.                 {
  91.                     sheet.Cells[i + startRowIndex, j + 1].Value = propertySelectors[j](items[i]);
  92.                 }
  93.             }
  94.         }
  95.     }
  96. }

2.在ABP的AppServer应用服务层调用:

  1. /// <summary>
  2.         /// 导出列表到Excel
  3.         /// </summary>
  4.         /// <param name="search">查询条件对象</param>
  5.         public AjaxResponse ExportListToExcel(ContractSearch search)
  6.         {
  7.             int rowCount = 0;
  8.             List<ContractList> dtoList = Search(search, out rowCount, false);
  9.             string fileName = "List.xlsx";
  10.             string sheetName = "列表";
  11.             const int columnCount = 11;
  12.             string[] header = new string[columnCount] { "签订日期""编号""价格""付款方式""执行期""状态""负责人" };
  13.             Func<ContractList, object>[] propertySelectors = new Func<ContractList, object>[columnCount] {
  14.                 new Func<ContractList, object>(l => l.SignDateString),
  15.                 new Func<ContractList, object>(l => l.Code),
  16.                 new Func<ContractList, object>(l => l.CoalType),
  17.                 new Func<ContractList, object>(l => l.TotalNumber),
  18.                 new Func<ContractList, object>(l => l.TotalAmount),
  19.                 new Func<ContractList, object>(l => l.PayMethods),
  20.                 new Func<ContractList, object>(l => l.ValidPeriod),
  21.                 new Func<ContractList, object>(l => l.ContractStatusName),
  22.                 new Func<ContractList, object>(l => l.AdminName)
  23.             };
  24.             return ExcelExporter<ContractList>.GetFileResponse(fileName, sheetName, dtoList, header, propertySelectors);
  25.         }

转载:https://www.cnblogs.com/xytmj/p/7607110.html

评价

.netcore3.1 abp+vue 实战 (一)

ABP前言一个应用程序框架和起点的ASP.NET MVC web应用程序与最佳实践和最流行的工具!(它是这样说的)1.项目的创建创建项...

abp框架的介绍和基用法

一、什么是ABP框架? ABP框架全称为“ASP.NETBoilerplateProject”,中文翻译为“ASP.NET样板项目”,诞生的主要目的就是...

abp数据库迁移

让我们来了解数据库迁移吧!还坑了我好久哇!一、首先二、出现程序包后按以下步骤做如果没按照以上步骤做的话你输入的是add...

abp添加菜单(服务端添加菜单项)

一 首先创建好一个项目二、找到Navigation结尾类,在类中找到SetNavigation方法,按照模板中提供的菜单添加方法添加MenuIte...

abp 框架之Navicat 误删数据库怎么恢复

前言:hello 大家好 我们又见面了 我是小付今天我tmd手贱 不小心把数据库干没了一言难尽啊,话不多说一起来看看吧。上次我...

abp框架中用插件生成复选框(神坑)

前言:hello ,各位老铁们 五一收假了 也该收心了 今天和小付一起来看看我遇到的问题吧!今天要说的是用插件生成复选框上次...

EF多种更新方法。EF修改Entity Framework修改。abp vnext ef 更新封装

[TOC] 方法1:直接执行更新的sql语句过于简单不说了 方法2:先查询在更新Users result = oapEntities.Users.Where(a =&gt...

abp tatable插件实现页面跳转查询数据

columnDefs:[ { targets:0, data:&quot;identification&quot;, render:function(data){ //此处是跳转页面连接(根指定...

abp swagger方法重载

代码:services.AddSwaggerGen(c =&gt; { c.ResolveConflictingActions(apiDescriptions =&gt; apiDescriptions.First()); });

abp项目下载

下载链接:https://aspnetboilerplate.com/Templates版本视情况而定1.2.

abp 视图生成

一.先在数据库生成一个视图,如下:二.在ABP程序的Core层创建与数据库里视图所对应的实体如下:三.在ABP程序的EntityFrame...

abp Xml为Swagger接口页添加详细注释

我们选中我们Application层的项目,右键“属性”,勾选为Xml生成文档,如下图所示。在你的 项目名.Web.Host 的startup目录...

abp 控制台的基本操作

Update-Database -Migration:0 (删除表结构,受用于数据库,它把数据库的表结构删了)drop-database(数据库删除)Remove-...

abp 自动映射 AutoMapper

转载:https://www.cnblogs.com/sugarwxx/p/13298800.html自动映射有如下几种:AutoMap,AutoMapFrom和AutoMapTo1.AutoMap...

abp 多租户数据共享

转载于:https://www.cnblogs.com/Martincheng/p/10185430.htmlABP开启多租户,实体继承了IMayHaveTenant或者IMustHaveTena...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术